【发布时间】:2016-02-02 16:52:58
【问题描述】:
我正在设计一个需要分组存储联系人的联系人关系应用程序。基本上我有 7 个“组类型”(为我的图像简化为 3 个),每个组类型共享相同的字段,所以我认为使用抽象“组”是有意义的,并让所有组类型继承方法这个抽象组。
所以基本上是这样的:
但是,这种方法会导致一些意想不到的困难。例如:
我不能使用抽象类的外键,所以如果我想为组和联系人之间的关系建模,我必须使用以下方法:
limit = (models.Q(app_label='groups', model="Group type A") |
models.Q(app_label='groups', model="Group type B") |
models.Q(app_label='groups', model="Group type C")
)
group_type = models.ForeignKey(ContentType, limit_choices_to=limit)
group_id = models.PositiveIntegerField()
group = GenericForeignKey('group_type', 'group_id')
这看起来很老套,使用这种方法,我也不得不进行一些硬编码。我无法通过简单的查询调用所有组,将来可能会添加一个新组。
有没有更好的方法来模拟这样的关系?我使用抽象类完全错误吗?
编辑:针对问题的一些额外解释。 用户通过另一个名为“WorkRelation”的对象连接到组,因为在将用户分配到组时(例如他的函数),存在一些相关的额外数据。
我最初选择了一个抽象类,因为我认为这可以让我灵活地让所有 Group 类型都只需调用 Group.objects.all()。如果我要使用基本模型,则组不会连接,我还必须对所有组名称进行硬编码。
【问题讨论】:
-
子组有额外的字段还是只是他们的逻辑发生了变化?
-
不,他们没有任何额外的字段
标签: django django-models django-orm