为Django添加评论Mixin.为什么CommentPost是这样定义的?

zpqajqem  于 2023-01-22  发布在  Go
关注(0)|答案(1)|浏览(113)

我是Django的初学者,我阅读WS Vincent的Django初学者手册。在倒数第二章,他写了下面的代码。他创建了一个视图,允许评论处理GET和POST请求,而不需要混合FormMixin和他创建的ArticleDetailView。我理解所有这些,但我不明白的是为什么它是这样构造的?有人能解释一下这个例子中self.object和self.get_object是什么吗?还有,为什么我们在第二个方法中保存了两次?谢谢!:

def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        return super().post(request, *args, **kwargs)

    def form_valid(self, form):
        comment = form.save(commit=False)
        comment.article = self.object
        comment.save()
        return super().form_valid(form)

    def get_success_url(self):
        article = self.get_object()
        return reverse("article_detail", kwargs={"pk": article.pk})
osh3o9ms

osh3o9ms1#

我没有书,但是get_object将返回此视图显示的对象。在您的示例中,视图可能设置为显示单个Article,但是表单发布Comment的详细信息。您使用get_object方法来访问Article示例,以便将Comment与它关联。
你的第二个问题:它不会保存两次。这可能会令人困惑,但是当你将commit设置为False时,它会示例化对象,但不会保存它。当你想在示例化模型示例后添加额外的信息时,你会这样做。它实际上是在comment.save()调用后保存到数据库的。

相关问题