gpt4 book ai didi

django - 在 Django 基于类的通用 View 中访问上下文对象

转载 作者:行者123 更新时间:2023-12-01 23:27:03 25 4
gpt4 key购买 nike

我正在使用 DetailView 来查看 Project 对象,并且我希望能够访问正在查看的 Project 对象,以便将其传递给装饰器,如下所示:

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)

但是,将“项目”或“对象”传递给装饰器会给我一个“对象”,而不是 Project 实例。如何获取该 Project 实例以便我的装饰器函数可以使用它?

最佳答案

对象是在dispatch()方法中检索的,所以你的装饰器不能使用它。您可以检查重写 get() 方法内部的成员资格:

class ProjectDetailView(DetailView):
context_object_name = "project"
model = Project

def get(self, request, **kwargs):
self.object = self.get_object()
if not self.object.is_member(self.request.user):
return HttpResponseRedirect('/') # or something else
context = self.get_context_data(object=self.object)
return self.render_to_response(context)

如果您想坚持使用装饰器,则必须根据要查看的参数(id 或 slug)从装饰器内的数据库中检索对象。但是您将从数据库中检索对象两次,第一次是在装饰器中,然后是在 View 中。

关于django - 在 Django 基于类的通用 View 中访问上下文对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5814884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com