为什么两次获取对象?

Why get object twice?

此代码来自此处 (http://gswd-a-crash-course-pycon-2014.readthedocs.org/en/latest/talksmodel.html)。 . .在TalkListRemoveTalkView中,他重写了get_object,得到了具体的Talk。然后他覆盖 get 方法,并再次检索对象。 . .

我的问题是,如果他在get_object方法中获取了我们需要的对象,为什么我们需要在get方法中再次调用get_object?

大声思考,get 方法是否从 URL 中提取 Talk 和 TalkList 的 kwargs,然后将它们传递给 get_object 方法进行查询?还是我完全错了?提前致谢。

class TalkListRemoveTalkView(views.LoginRequiredView, RedirectView):
    model = Talk

    def get_redirect_url(self, *args, **kwargs):
        return self.talklist.get_absolute_url()

    def get_object(self, pk, talklist_pk):
        try:
            talk = self.model.objects.get(
                pk=pk,
                talk_list_id=talklist_pk,
                talk_list__user=self.request.user
            )
        except Talk.DoesNotExist:
            raise Http404
        else:
            return talk

    def get(self, request, *args, **kwargs):
        self.object = self.get_object(kwargs.get('pk'),
                                      kwargs.get('talklist_pk'))
        self.talklist = self.object.talk_list
        self.object.delete()
        return super(TalkListRemoveTalkView, self).get(request, *args, **kwargs)

他不会重复两次。 get 方法中对 get_object 的调用是调用该方法的唯一时间。在那个调用之外没有对它的引用,并且这个视图不会继承任何其他会在别处调用它的视图。

请注意,由于其他原因,这段代码是错误的;特别是,您绝不能在 GET 调用中执行诸如删除之类的破坏性操作,这些操作应始终在 POST 上完成。