为什么要拿两次对象



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

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

想一想,get方法是否从Talk和TalkList的URL中提取了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中执行。

最新更新