Django IntegrityError“author_id”违反notnull约束

2024-10-16 22:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道为什么Django在我尝试发布评论表单时会提出IntegrityError。它迫使我将author和halp定义为null=Trueblank=True,但我不想这样做。在我的项目中,当有人发表评论时,作者和附加的帖子(halp)不能为空

第一:“作者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})

如果有人能帮我,我想我错过了什么。先谢谢你

致以最良好的祝愿


Tags: textpyselfformidtruereturnmodels
1条回答
网友
1楼 · 发布于 2024-10-16 22:27:36

将您的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']})

相关问题 更多 >