为了账号安全,请及时绑定邮箱和手机立即绑定

Django IntegrityError“author_id”违反非空约束

Django IntegrityError“author_id”违反非空约束

米脂 2023-10-11 20:11:39
我不知道为什么当我尝试发布评论表单时 Django 会引发 IntegrityError 。它迫使我定义作者并停下来null=True,blank=True但我不想这样做。在我的项目中,当有人发表评论时,作者和附加的帖子(halp)不能为空。第一:“author_id”违反非空约束第二:“halp_id”违反非空约束models.py:class Comment(models.Model):    STATE_CHOICES = [        ('open', _('Ouvert')),        ('deleted', _('Supprimé'))    ]    halp = models.ForeignKey("Halp", on_delete=models.CASCADE)    text = models.TextField()    comment = models.ForeignKey("self", on_delete=models.CASCADE, related_name="comment_child", null=True, blank=True)    date = models.DateTimeField(auto_now_add=True)    author = models.ForeignKey(User, on_delete=models.CASCADE)    state = models.CharField(max_length=20, choices=STATE_CHOICES, default='open')    is_solution = models.BooleanField(default=False)    class Meta:        ordering = ['halp', '-id']    def __str__(self):        return self.halp.title    def get_text(self):        return self.text[:20]forms.py:class CommentForm(forms.ModelForm):    text = forms.CharField(        label='',        widget=forms.Textarea(attrs={            'class': 'form-control form-custom',            'placeholder': _('Redigez une réponse ou un commentaire...')        })    )    class Meta:        model = Comment        fields = ['text']views.py:class CommentCreate(LoginRequiredMixin, CreateView):    model = Comment    form_class = forms.CommentForm    def form_valid(self, form):        text = form.cleaned_data['text']        self.halp = Halp.objects.get(slug=self.kwargs['slug'])        self.comment = Comment.objects.create(            text=text,            author=self.request.user,            halp=self.halp,        )        return super(CommentCreate, self).form_valid(form)    def get_success_url(self, **kwargs):        return reverse_lazy('forum:halp-detail', kwargs={'slug': self.halp.slug})如果有人可以帮助我,我想我错过了一些东西。先感谢您。
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

改变你的form_valid(...)方法,


from django.http import HttpResponseRedirect



class CommentCreate(LoginRequiredMixin, CreateView):

    model = Comment

    form_class = forms.CommentForm


    def form_valid(self, form):

        comment = form.save(commit=False)

        comment.author = self.request.user

        comment.halp = Halp.objects.get(slug=self.kwargs['slug'])

        comment.save()

        self.object = comment

        return HttpResponseRedirect(self.get_success_url())


    def get_success_url(self, **kwargs):

        return reverse_lazy('forum:halp-detail', kwargs={'slug': self.kwargs['slug']})


查看完整回答
反对 回复 2023-10-11
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信