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