此代码来自此处(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)
答案 0 :(得分:1)
他没有做两次。 get_object
方法中对get
的调用是该方法被调用的唯一时间。在该调用之外没有对它的引用,并且该视图不会继承任何其他在其他地方调用它的视图。
请注意,此代码因其他原因而不好;特别是,你必须永远不要像GET调用中的删除那样执行破坏性操作,这些操作应始终在POST上完成。