Ошибка типа в представлении: поле ожидало число, но получило ‘ ‘

#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 Я добавил пример к своему ответу