为了账号安全,请及时绑定邮箱和手机立即绑定

Django 中隐式多对多(多对多对多)关系的模型字段

Django 中隐式多对多(多对多对多)关系的模型字段

缥缈止盈 2022-09-06 21:28:14
假设在我的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


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信