#python #django #django-models #django-views #django-users
#python #django #django-модели #django-просмотры #django-пользователи
Вопрос:
я впервые публикую вопрос в stack overflow, так что потерпите меня: D Я пытаюсь создать модель персонала из формы, но ошибка продолжает сохраняться
Это мой файл моделей :
class CustomUser(AbstractUser):
user_type_data = ((1, "HOD"), (2, "Consultant"))
user_type = models.CharField(default=1, choices=user_type_data, max_length=10)
class Consultant(models.Model):
CHOICES = (
('P', 'au paiement'),
('J15', 'J 15'),
('J30', 'J 30'),
)
id = models.AutoField(primary_key=True)
admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
client_id=models.ForeignKey(Client,on_delete=models.CASCADE,default=1)
tarif_facturation = models.IntegerField(blank=True, null=True)
tarif_Consultant = models.IntegerField(blank=True, null=True)
cnss = models.IntegerField(blank=True, null=True)
rib = models.IntegerField(blank=True, null=True)
paiement = models.CharField(max_length=300, choices=CHOICES)
profile_pic = models.FileField(blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)
objects = models.Manager()
@receiver(post_save,sender=CustomUser)
def create_user_profile(sender,instance,created,**kwargs):
if created:
if instance.user_type == 1:
AdminHOD.objects.create(admin=instance)
if instance.user_type == 2:
Consultant.objects.create(admin=instance, client_id=Client.objects.get(id=1), tarif_Consultant="", tarif_facturation="", cnss="", rib="", paiement="")
@receiver(post_save,sender=CustomUser)
def save_user_profile(sender,instance,**kwargs):
if instance.user_type==1:
instance.adminhod.save()
if instance.user_type==2:
instance.consultant.save()
Мои представления:
def add_staff_save(request):
if request.method!="POST":
return HttpResponse("Method Not Allowed")
else:
email=request.POST.get("email")
password=request.POST.get("password")
first_name=request.POST.get("first_name")
last_name=request.POST.get("last_name")
username=request.POST.get("username")
client_id=request.POST.get("client")
tarif_facturation=request.POST.get("tarif_facturation")
tarif_Consultant=request.POST.get("tarif_Consultant")
cnss = request.POST.get("cnss")
rib = request.POST.get("rib")
paiement = request.POST.get("paiement")
#try:
user=CustomUser.objects.create_user(username=username,password=password,email=email,last_name=last_name,first_name=first_name,user_type=2)
client_obj=Client.objects.get(id=client_id)
user.consultants.client_id=client_obj
user.consultant.tarif_facturation=tarif_facturation
user.consultant.tarif_Consultant=tarif_Consultant
user.consultant.cnss=cnss
user.consultant.rib=rib
user.consultant.paiement=paiement
user.save()
Вот обратная трассировка :
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'gestion']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'gestion.LoginCheckMiddleWare.LoginCheckMiddleWare']
Traceback (most recent call last):
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsfields__init__.py", line 1774, in get_prep_value
return int(value)
The above exception (invalid literal for int() with base 10: '') was the direct cause of the following exception:
File "C:UsersWDMiniconda3libsite-packagesdjangocorehandlersexception.py", line 47, in inner
response = get_response(request)
File "C:UsersWDMiniconda3libsite-packagesdjangocorehandlersbase.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
**File "C:UsersWDDesktopweserveitgestionHodViews.py", line 95, in add_staff_save
user=CustomUser.objects.create_user(username=username,password=password,email=email,last_name=last_name,first_name=first_name,user_type=2)**
File "C:UsersWDMiniconda3libsite-packagesdjangocontribauthmodels.py", line 146, in create_user
return self._create_user(username, email, password, **extra_fields)
File "C:UsersWDMiniconda3libsite-packagesdjangocontribauthmodels.py", line 140, in _create_user
user.save(using=self._db)
File "C:UsersWDMiniconda3libsite-packagesdjangocontribauthbase_user.py", line 67, in save
super().save(*args, **kwargs)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsbase.py", line 751, in save
force_update=force_update, update_fields=update_fields)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsbase.py", line 800, in save_base
update_fields=update_fields, raw=raw, using=using,
File "C:UsersWDMiniconda3libsite-packagesdjangodispatchdispatcher.py", line 179, in send
for receiver in self._live_receivers(sender)
File "C:UsersWDMiniconda3libsite-packagesdjangodispatchdispatcher.py", line 179, in <listcomp>
for receiver in self._live_receivers(sender)
**File "C:UsersWDDesktopweserveitgestionmodels.py", line 134, in create_user_profile
Consultant.objects.create(admin=instance, client_id=Client.objects.get(id=1), tarif_Consultant="", tarif_facturation="", cnss="", rib="", paiement="", profile_pic="")
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsmanager.py", line 85, in manager_method**
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsquery.py", line 447, in create
obj.save(force_insert=True, using=self.db)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsbase.py", line 751, in save
force_update=force_update, update_fields=update_fields)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsbase.py", line 789, in save_base
force_update, using, update_fields,
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsbase.py", line 892, in _save_table
results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsbase.py", line 932, in _do_insert
using=using, raw=raw,
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsmanager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsquery.py", line 1249, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelssqlcompiler.py", line 1394, in execute_sql
for sql, params in self.as_sql():
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelssqlcompiler.py", line 1339, in as_sql
for obj in self.query.objs
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelssqlcompiler.py", line 1339, in <listcomp>
for obj in self.query.objs
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelssqlcompiler.py", line 1338, in <listcomp>
[self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelssqlcompiler.py", line 1279, in prepare_value
value = field.get_db_prep_save(value, connection=self.connection)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsfields__init__.py", line 823, in get_db_prep_save
return self.get_db_prep_value(value, connection=connection, prepared=False)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsfields__init__.py", line 818, in get_db_prep_value
value = self.get_prep_value(value)
File "C:UsersWDMiniconda3libsite-packagesdjangodbmodelsfields__init__.py", line 1778, in get_prep_value
) from e
Тип исключения: ошибка значения в /add_staff_save
Значение исключения: Поле ‘tarif_facturation’ ожидало число, но получило «.
Комментарии:
1. Вы выполняли какую-либо отладку? Кроме того, используете ли вы базовую среду Conda для разработки?
2. да, я использую conda .. спасибо за ответ, markwalker_ решил проблему
3. да, я использую conda.. Верно, но используете ли вы базовую среду (/ root, по умолчанию)?
Ответ №1:
Проблема заключается в вашем создании Conslutant
объекта в post_save
Consultant.objects.create(
admin=instance,
client_id=Client.objects.get(id=1),
tarif_Consultant="",
tarif_facturation="",
cnss="",
rib="",
paiement=""
)
tarif_facturation
является IntegerField
но прямо там ваше значение является пустой строкой. Сделайте это значение числом, и эта ошибка будет устранена.
Однако вы делаете то же самое для множества других атрибутов, которые вы устанавливаете при Consultant
создании, поэтому просто убедитесь, что ваши значения соответствуют типам, требуемым моделью.
Что-то вроде этого;
Consultant.objects.create(
admin=instance,
client_id=Client.objects.get(id=1),
tarif_facturation=1,
)
Комментарии:
1. большое вам спасибо за быстрый ответ.. Я новичок в django, можете ли вы показать мне, как это сделать правильно?
2. @aminezahhaoui Я добавил пример к своему ответу