【发布时间】:2020-07-01 20:21:15
【问题描述】:
假设在我的 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 的工具)来执行此操作?
【问题讨论】:
-
你的解决方案绝对OK。