假设在我的django应用程序的模型中,我有三个模型,每个模型都有许多对多的关系(这是一个玩具示例)。class User(models.Model): permissions_group = models.ManyToManyField(Group)class Group(models.Model): permissions_area = models.ManyToManyField(Area)class Area(models.Model): #other irrelevant field data... pass我希望在我的模型上有一个字段,它表达了用户和区域之间的关系,这是一个隐式的多对多模型(也就是说,我不定义在数据库中创建其他表的其他关系,我使用通过组的关系)。User我考虑过使用自定义管理器,但这似乎不允许使用标准相关字段管理器看到的那种关系过滤;我可以简单地在类上设置一个装饰属性:class User(models.Model): @property permissions_areas(self): return Area.objects.filter(group__in=self.permissions_groups.all())但这似乎很笨拙,并且不使用任何django约定。有没有一种传统的方法可以在django中使用Django的工具(自定义管理器或类似的东西)来做到这一点,而我错过了?RelatedManager
1 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
您只需使用两个下划线来查看关系,因此:
class User(models.Model):
@property
permissions_areas(self):
return Area.objects.filter(group__user=self).distinct()
如果 可以属于有权访问此区域的多个组,则非常有用。如果没有,它将为每个对该区域具有权限的组以及用户所属的位置返回该权限。.distinct()User.distinct()Area
添加回答
举报
0/150
提交
取消