我有一个 PrintDetailView,如果打印的 to_publish 属性设置为 True,我希望只有打印的所有者或任何人都可以访问它。
为了做到这一点,我正在尝试使用一个permission_required()
方法装饰器,它接受来自 Print 模型的可调用对象:
class PrintDetailView(DetailView):
template_name = 'prints/detail.html'
queryset = Print.objects.all()
@method_decorator(permission_required('prints.user_is_owner_or_public'))
def dispatch(self, request, *args, **kwargs):
return super(PrintDetailView, self).dispatch(request, *args, **kwargs)
这是user_is_owner_or_public()
Print 模型中的方法:
def user_is_owner_or_public(self, user):
"""Checks whether the print is a public print, or
whether the current user is the owner
"""
if self.user is user or self.to_publish:
return True
现在,当我在 to_publish 属性设置为 True 的打印详细信息页面上对此进行测试时,我仍然看到登录屏幕,因此我知道正在调用 permission_required() 函数;但是,它显然没有调用 user_is_owner_or_public() 方法。
任何人都可以让我了解我如何完成这项工作吗?
TIA,安迪