繁体   English   中英

在Django DetailView中发表评论

[英]Post comment inside Django DetailView

我需要在文章页面添加评论。 发布请求接收数据,但不保存。

在models.py中:

class TemporaryComment(models.Model):
    article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='temporary_comment')
    email = models.EmailField()
    message = models.TextField(max_length=1500)
    timestamp = models.DateTimeField(auto_now_add=True)
    is_approved = models.BooleanField(default=True)

在forms.py中:

class CommentModelForm(forms.ModelForm):

    class Meta:
        model = TemporaryComment
        fields = [
            'article',
            'email',
            'message',
        ]

在views.py中:

class ArticleDetailView(FormMixin, DetailView):
    model = Article
    template_name = 'article.html'
    form_class = CommentModelForm

    def get_success_url(self):
        return reverse_lazy('main:article', kwargs={'pk': self.object.pk})

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['last_articles'] = Article.objects.filter(is_active=True).order_by('-timestamp')[:10]
        context['comments'] = self.object.temporary_comment.filter(is_approved=True)
        context['form'] = self.get_form()
        return context

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def form_valid(self, form):
        form.save()
        return super().form_valid(form)

如果我在forms.py中注释掉article字段,则会收到此错误:

 null value in column "article_id" violates not-null 
 constraint. DETAIL:  Failing row 
 contains (18, username@email.com, check message, 2019-01-20 18:35:36.615955+00, t, null).

我们将很乐意接受帮助。 谢谢你的时间。

应该将其注释掉,并在form_valid设置。

def form_valid(self, form):
    form.instance.article = self.object
    form.save()
    return super().form_valid(form)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM