4
我正在使用DetailView来查看Project对象,并且我希望能够访问正在查看的Project对象以便将其传递给装饰器,是这样的:在Django基于类的通用视图中访问上下文对象
class ProjectDetailView(DetailView):
context_object_name = "project"
model = Project
@method_decorator(membership_required(project))
def dispatch(self, *args, **kwargs):
return super(ProjectDetailView, self).dispatch(*args, **kwargs)
然而,传递“项目”或“对象”的装饰给了我一个“对象”,而不是一个项目实例。我如何获得该项目实例,以便我的装饰器功能可以使用它?
谢谢你的帮助! :) – Asterism 2011-05-02 02:33:12
你能告诉我为什么我需要使用'self.request.user'而不是'request.user'吗?我用'request.user'试过了代码,它工作正常,但我不知道这是否是巧合。 – Asterism 2011-05-02 05:55:09
是的,你可以使用'request.user',因为它作为参数传递给方法。我只是没有注意到这一点。通常,当我在基于类的视图中覆盖方法时,它们不会将请求作为参数(类似于'get_context_data','get_query_set','get_object'等方法)获取请求。 – 2011-05-03 07:27:07