2013-02-12 85 views
3

在get/post中稍后调用self.get_object()时,是否存在已确认的方式,可以在调度中验证对象而不会进行额外的数据库调用?Django基于类的视图:在调度中验证对象

这里是我迄今(略有这个问题改变):

class CourseUpdateView(UpdateView): 
    def dispatch(self, request, *args, **kwargs): 

     self.request = request 
     self.kwargs = kwargs 
     self.object = self.get_object() 

     if self.object.is_online: 
      messages.warning(request, "Sorry this one can't be updated") 
      return redirect("course:detail", pk=self.kwargs['pk']) 

     # this is going to call self.get_object again isn't it? 
     return UpdateView.dispatch(self, request, *args, **kwargs) 

回答

3

可以缓存的get_object()结果。

这里有一个简单的例子:

class CourseUpdateView(UpdateView): 
    # [...] your dispatch method 

    def get_object(self): 
     # it doesn't matter how many times get_object is called per request 
     # it should not do more than one request 
     if not hasattr(self, '_object'): 
      self._object = super(CourseUpdateView, self).get_object() 
     return self._object 
相关问题