我不知道为什么当我尝试发布评论表单时 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})
如果有人可以帮助我,我想我错过了一些东西。先感谢您。
慕容森
相关分类