我不知道为什么当我尝试发布评论表单时 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 回答
![?](http://img1.sycdn.imooc.com/545865620001c45402760276-100-100.jpg)
慕容森
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']})
添加回答
举报
0/150
提交
取消