【发布时间】:2021-11-24 02:37:18
【问题描述】:
我使用django-guardian库,我想创建Manager来根据用户权限过滤对象。
例如:
from guardian.shortcuts import get_objects_for_user
class WithUser(models.Manager):
user_obj = None
def assign_user(self,user_obj):
self.user_obj = user_obj
qs = super().get_queryset()
#########################
# how I know if the current qs have related field and how to get related field managers.
#???????????????
def get_queryset(self):
qs = super().get_queryset()
if self.user_obj:
qs = get_objects_for_user(self.user_obj,"view_%s"%self.model.__name__.lower(),qs,accept_global_perms=False)
return qs
class A(models.Model):
# the model fields
objects = WithUser()
class B(models.Model):
# the model fields
a = models.ForeignKey(A,on_delete=Model.CASCADE)
objects = WithUser()
class C(models.Model):
# the model fields
b = models.ForeignKey(B,on_delete=Model.CASCADE)
objects = WithUser()
如何根据C对象的权限和A、B的权限过滤C对象。
我希望通用规则根据其权限和相关对象的权限过滤任何模型对象。
【问题讨论】:
标签: django django-queryset django-managers django-guardian