簡體   English   中英

django.db.utils.IntegrityError: NOT NULL 約束失敗:user.id

[英]django.db.utils.IntegrityError: NOT NULL constraint failed: user.id

即使我指定了作者,我也不知道為什么會導致錯誤。 我會很感激你的幫助。

model & 表格

class SuperTitle(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='debate_author')
    super_title = models.CharField(max_length=100)
    liker = models.ManyToManyField(User, related_name='debate_liker')

    def __str__(self):
        return self.super_title


class SuptitForm(forms.ModelForm):
    class Meta:
        model = SuperTitle
        fields = ['super_title']

視圖.py

def create(request):
...
  dic = {'super_title' : request.POST.get('sup_title')}
  sup_form = SuptitForm(dic)
  if sup_form.is_valid():
    sup_form.author = request.user
    sup_form.super_title = ...
    sup_form.save()
...

在此處輸入圖像描述

在 /polls/debate/create/ NOT NULL 約束返回 IntegrityError 失敗:polls_supertitle.author_id

您會收到此錯誤,因為您想在沒有作者的情況下保存表單(在數據庫中創建新的 SuperTitle 對象)。 您需要以某種方式傳遞作者反對或 id 來形成。 如果 request.user 是作者,我推薦表格:

class SuptitForm(forms.ModelForm):
    class Meta:
        model = SuperTitle
        fields = ['super_title', 'author']
        widgets = {'author': forms.HiddenInput()}

並認為:

    def create(request):
      if request.method == 'POST':
        sup_form = SuptitForm(request.POST)
        if sup_form.is_valid():
          sup_form.save()
      else:
        sup_form = SuptitForm(initial={'author': request.user}
...

可能您沒有經過身份驗證的用戶,因此request.user返回無。

使用login_required裝飾器,以便只有經過身份驗證的用戶才能訪問此 function。


from django.contrib.auth.decorators import login_required

@login_required
def create(request):
   ........

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM