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

假设在我的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


缥缈止盈
浏览 101回答 1
1回答

郎朗坤

您只需使用两个下划线来查看关系,因此:class User(models.Model):    @property    permissions_areas(self):        return Area.objects.filter(group__user=self).distinct()如果 可以属于有权访问此区域的多个组,则非常有用。如果没有,它将为每个对该区域具有权限的组以及用户所属的位置返回该权限。.distinct()User.distinct()Area
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python