猿问

Django IntegrityError“author_id”违反非空约束

我不知道为什么当我尝试发布评论表单时 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})

如果有人可以帮助我,我想我错过了一些东西。先感谢您。


米脂
浏览 87回答 1
1回答

慕容森

改变你的form_valid(...)方法,from django.http import HttpResponseRedirectclass 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']})
随时随地看视频慕课网APP

相关分类

Python
我要回答