Django:“ user_id”列中的空值违反了非空约束

赛马鲁蒂

我正在使用Postgresql,并在Django项目中创建了以下模型。

型号

User = settings.AUTH_USER_MODEL

Discount_Type=(
    ('$', '$'),
    ('%', '%'),
)

class Invoice(models.Model):
    ticket          = models.OneToOneField(Ticket,  related_name='invoice', blank=True,null=True, on_delete=models.CASCADE)
    updated_by      = models.ForeignKey(User, null=True, blank=True, related_name='invoice_editor', on_delete=models.SET_NULL)
    date_created    = models.DateTimeField(auto_now_add=True)
    date_updated    = models.DateTimeField(auto_now=True)
    is_paid        = models.BooleanField(default=False)
    
    federal_price = models.DecimalField(default=20.00, max_digits=6, decimal_places=2)
    federal_qty = models.PositiveIntegerField(default=1)
    federal_amount = models.DecimalField(null=True, blank=True, max_digits=6, decimal_places=2)
    state_price = models.DecimalField(default=20.00, max_digits=6, decimal_places=2)
    state_qty = models.PositiveIntegerField(default=1)
    state_amount = models.DecimalField(null=True, blank=True, max_digits=6, decimal_places=2)
    total_amount = models.DecimalField(null=True, blank=True, max_digits=6, decimal_places=2)
    discount = models.DecimalField(default=0.00, max_digits=6, decimal_places=2)
    discount_type  = models.CharField(default='$', max_length=5, choices=Discount_Type)
    discount_value = models.DecimalField(null=True, blank=True, max_digits=6, decimal_places=2)
    amount_payable = models.DecimalField(null=True, blank=True, max_digits=6, decimal_places=2)

    def __str__(self):
        return str(self.amount_payable)

    class Meta:
        ordering = ['-date_updated']

class Ticket(models.Model):
   tax_year        = models.CharField(max_length=50, default='2020')
   service         = models.CharField(max_length=50, default='Tax Filing')
   description     = models.TextField(max_length=1000, blank=True)
   customer        = models.ForeignKey(User, related_name='ticket_customer', on_delete=models.CASCADE)
   agents          = models.ManyToManyField(User, related_name="ticket_agents", blank=True)
   support         = models.ForeignKey(User, related_name='ticket_support', blank=True, null=True, on_delete=models.SET_NULL)
   preparation     = models.ForeignKey(User, related_name='ticket_preparation', blank=True, null=True, on_delete=models.SET_NULL)
   filing          = models.ForeignKey(User, related_name='ticket_filing', blank=True, null=True, on_delete=models.SET_NULL)


class Notification(models.Model):
    ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, related_name="notification_ticket", blank=True, null=True)
    sender = models.ForeignKey(User, on_delete=models.SET_NULL, related_name="notification_from_user", blank=True, null=True)
    receivers = models.ManyToManyField(User, related_name="notification_to_user", blank=True)
    seen_by = models.ManyToManyField(User, related_name="notification_seen_by", blank=True)
    text_preview = models.CharField(max_length=255, blank=True)
    record_id = models.CharField(max_length=255, blank=True)
    date = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering: ['-date']
    def __str__(self):
        return self.text_preview

我的forms.py

class TicketCreateForm(forms.ModelForm):
    class Meta:
        model = Ticket
        fields = ('tax_year', 'service', 'description',)
        widgets = {
          'tax_year': forms.Select(attrs={'class': 'form-control'}),
          'service': forms.Select(attrs={'class': 'form-control'}),
          'description': forms.Textarea(attrs={'rows':3, 'cols':60, 'class':'form-control'}),
        }

我的views.py

def customer_ticket_create(request):
    form = TicketCreateForm()
    if request.method == 'POST':
        form = TicketCreateForm(request.POST or None)
        if form.is_valid():
            ticket = form.save(commit=False)
            ticket.customer = request.user  
            ticket.save()
            Invoice.objects.create( ticket=ticket, updated_by=request.user)
            return redirect('customer_home')

但是我得到django.db.utils.IntegrityError:“ user_id”违反了非null约束。此错误是由于Invoice.objects.create(ticket = ticket,updated_by = request.user)没有此行,我的视图工作正常。即使尝试从SHELL创建发票,我也遇到相同的错误。

不知道为什么视图无法创建发票。有人可以帮帮我吗?

到目前为止,我已经尝试了其他类似问题的以下解决方案:使用(null = True,Blank = True)删除迁移文件和数据库更新发票模型中的ForeignKey模型字段。运行迁移并进行迁移,并尝试再次创建发票,但仍收到相同的错误。

错误回溯

环境:

Request Method: POST
Request URL: http://127.0.0.1:8000/ticket/create

Django Version: 3.1.4
Python Version: 3.8.5
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.sites',
 'django.forms',
 'accounts',
 'customers',
 'tickets',
 'message',
 'organizer',
 'documents',
 'agents',
 'invoices',
 'notifications',
 'workflow',
 'allauth',
 'allauth.account',
 'allauth.socialaccount',
 'intl_tel_input',
 'localflavor',
 'django_filters',
 'crispy_forms',
 'storages',
 'debug_toolbar',
 'django_extensions']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.common.BrokenLinkEmailsMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'csp.middleware.CSPMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware']



Traceback (most recent call last):
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)

The above exception (null value in column "user_id" violates not-null constraint
DETAIL:  Failing row contains (38, 18, null).
) was the direct cause of the following exception:
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:\Users\Sai Maruthi\Documents\Dev\lappy\src\accounts\decorators.py", line 20, in wrapper_func
    return view_func(request, *args, **kwargs)
  File "C:\Users\Sai Maruthi\Documents\Dev\lappy\src\tickets\views.py", line 61, in customer_ticket_create
    Invoice.objects.create(
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\query.py", line 447, in create
    obj.save(force_insert=True, using=self.db)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\base.py", line 753, in save
    self.save_base(using=using, force_insert=force_insert,
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\base.py", line 801, in save_base
    post_save.send(
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\dispatch\dispatcher.py", line 177, in send
    return [
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\dispatch\dispatcher.py", line 178, in <listcomp>
    (receiver, receiver(signal=self, sender=sender, **named))
  File "C:\Users\Sai Maruthi\Documents\Dev\lappy\src\invoices\signals.py", line 88, in invoice_update_notification
    notification.seen_by.set([ticket.customer, ticket.support, ticket.preparation, ticket.filing, ticket.fbar, ticket.itin, ticket.extra])
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\fields\related_descriptors.py", line 1015, in set
    self.add(*new_objs, through_defaults=through_defaults)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\fields\related_descriptors.py", line 950, in add
    self._add_items(
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\fields\related_descriptors.py", line 1130, in _add_items
    self.through._default_manager.using(db).bulk_create([
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\query.py", line 506, in bulk_create
    returned_columns = self._batched_insert(
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\query.py", line 1277, in _batched_insert
    self._insert(item, fields=fields, using=self.db, ignore_conflicts=ignore_conflicts)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\query.py", line 1254, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\models\sql\compiler.py", line 1397, in execute_sql
    cursor.execute(sql, params)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\debug_toolbar\panels\sql\tracking.py", line 198, in execute
    return self._record(self.cursor.execute, sql, params)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\debug_toolbar\panels\sql\tracking.py", line 133, in _record
    return method(sql, params)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\backends\utils.py", line 98, in execute
    return super().execute(sql, params)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\backends\utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\backends\utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\Sai Maruthi\.virtualenvs\lappy-FT-EdR8P\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)

Exception Type: IntegrityError at /ticket/create
Exception Value: null value in column "user_id" violates not-null constraint
DETAIL:  Failing row contains (38, 18, null).

编辑1

@receiver(post_save, sender=Invoice)
def invoice_update_notification(sender, instance, **kwargs):
    if instance.is_paid:
        ticket = instance.ticket
        notification = Notification.objects.create(
            ticket=ticket,
            sender=instance.updated_by,
            text_preview= f'Received Payment- {instance.amount_payable}',
            record_id=instance.id,)
        notification.seen_by.set([ticket.customer, ticket.support, ticket.preparation, ticket.filing])
    else:
        ticket = instance.ticket
        notification = Notification.objects.create(
            ticket=ticket,
            sender=instance.updated_by,
            text_preview= f'Invoice Updated - {instance.amount_payable}',
            record_id=instance.id,)
        notification.seen_by.set([ticket.customer, ticket.support, ticket.preparation, ticket.filing])
伊恩·谢尔文顿

ticket.supportticket.preparation并且ticket.filing都是可空的,意味着它们中的任何一个都可以None您需要过滤出为空的字段。

内置函数filter可用于过滤列表中的“虚假”项,例如None通过None作为第一个参数传递

users = list(filter(None, [ticket.customer, ticket.support, ticket.preparation, ticket.filing]))
notification.seen_by.set(users)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

列“ user_id”中的空值违反了Django 1.9中的非空约束

来自分类Dev

Django-IntegrityError:“ user_id”列中的空值违反了非空约束

来自分类Dev

列“ user_id”中的Django空值违反了非空约束

来自分类Dev

“ owner_id”列中/ new空值处的Django IntegrityError违反了非空约束

来自分类Dev

Django-列中的空值违反了Django Admin中的非空约束

来自分类Dev

Django-列中的空值违反了Django Admin中的非空约束

来自分类Dev

Django - “wins”列中的空值违反了非空约束

来自分类Dev

提交表单时,为什么 Django 会在“user_id”列中引发 IntegrityError :null 值违反非空约束?

来自分类Dev

在DRF(django-rest-framework)中,列“ author_id”中的空值违反了非空约束。我该怎么办?

来自分类Dev

Django 自定义用户模型:IntegrityError:“is_superuser”列中的空值违反了非空约束

来自分类Dev

django.db.utils.IntegrityError:关系“ movie_movie”的列“ author_id”中的空值违反了非空约束,不知道为什么会这样

来自分类Dev

错误:“ id”列中的空值违反了非空约束

来自分类Dev

Rails:PG :: NotNullViolation:错误:“ id”列中的空值违反了非空约束

来自分类Dev

500错误:“ timeline_id”列中的空值违反了非空约束

来自分类Dev

Rails:PG :: NotNullViolation:错误:“ id”列中的空值违反了非空约束

来自分类Dev

如何解决错误:(psycopg2.errors.NotNullViolation)列“ id”中的空值违反了非空约束?

来自分类Dev

Django:(1048,“列'user_id'不能为空”)

来自分类Dev

“ last_login”列中的空值违反了非空约束

来自分类Dev

使用upsert时,“ created_at”列中的空值违反了非空约束

来自分类Dev

WSO2AM 分析 2.1 - “os”列中的空值违反了非空约束

来自分类常见问题

Odoo:服务器操作在“ activity_user_type”列中返回空值违反了非空约束

来自分类Dev

IntegrityError:关系“ message”的列“ category_id”中的空值违反了非空约束详细信息:失败行包含

来自分类Dev

Python django 外键(1048,“列 'USER_ID' 不能为空”)

来自分类Dev

违反完整性约束:1048列“ user_id”不能为空

来自分类Dev

空值违反了非空约束,但是模型具有空白= True null = True

来自分类Dev

Django:重复的键值违反了唯一约束

来自分类Dev

Django:重复的键值违反了唯一约束

来自分类Dev

django:非空字段的默认值

来自分类Dev

Django中的空queryDict

Related 相关文章

  1. 1

    列“ user_id”中的空值违反了Django 1.9中的非空约束

  2. 2

    Django-IntegrityError:“ user_id”列中的空值违反了非空约束

  3. 3

    列“ user_id”中的Django空值违反了非空约束

  4. 4

    “ owner_id”列中/ new空值处的Django IntegrityError违反了非空约束

  5. 5

    Django-列中的空值违反了Django Admin中的非空约束

  6. 6

    Django-列中的空值违反了Django Admin中的非空约束

  7. 7

    Django - “wins”列中的空值违反了非空约束

  8. 8

    提交表单时,为什么 Django 会在“user_id”列中引发 IntegrityError :null 值违反非空约束?

  9. 9

    在DRF(django-rest-framework)中,列“ author_id”中的空值违反了非空约束。我该怎么办?

  10. 10

    Django 自定义用户模型:IntegrityError:“is_superuser”列中的空值违反了非空约束

  11. 11

    django.db.utils.IntegrityError:关系“ movie_movie”的列“ author_id”中的空值违反了非空约束,不知道为什么会这样

  12. 12

    错误:“ id”列中的空值违反了非空约束

  13. 13

    Rails:PG :: NotNullViolation:错误:“ id”列中的空值违反了非空约束

  14. 14

    500错误:“ timeline_id”列中的空值违反了非空约束

  15. 15

    Rails:PG :: NotNullViolation:错误:“ id”列中的空值违反了非空约束

  16. 16

    如何解决错误:(psycopg2.errors.NotNullViolation)列“ id”中的空值违反了非空约束?

  17. 17

    Django:(1048,“列'user_id'不能为空”)

  18. 18

    “ last_login”列中的空值违反了非空约束

  19. 19

    使用upsert时,“ created_at”列中的空值违反了非空约束

  20. 20

    WSO2AM 分析 2.1 - “os”列中的空值违反了非空约束

  21. 21

    Odoo:服务器操作在“ activity_user_type”列中返回空值违反了非空约束

  22. 22

    IntegrityError:关系“ message”的列“ category_id”中的空值违反了非空约束详细信息:失败行包含

  23. 23

    Python django 外键(1048,“列 'USER_ID' 不能为空”)

  24. 24

    违反完整性约束:1048列“ user_id”不能为空

  25. 25

    空值违反了非空约束,但是模型具有空白= True null = True

  26. 26

    Django:重复的键值违反了唯一约束

  27. 27

    Django:重复的键值违反了唯一约束

  28. 28

    django:非空字段的默认值

  29. 29

    Django中的空queryDict

热门标签

归档