Django:多态外键关系

时间:2012-07-24 21:59:06

标签: python django django-models

我正在Django开发一种社交网络,但我没有看到保持耦合模型的方法。

我有一个模型User,它可以通过Comment模型评论其他用户,图片,页面(大写是因为它们是模型)。为了安排我创建董事会模型的所有评论,该模型有一个所有者并接收添加到该所有者的所有评论。问题是我不知道它的拥有者是什么,即它属于哪个模型。它可能是pic的主板,但也是用户的主板。所以我最终得到了这样的模型:

class Board(models.Model):
   category = models.IntegerField()
   owner_id = models.IntegerField()

我存储所有者的ID和所有者的类别,以便能够执行其他任务,但此解决方案根本不能说服我。一位朋友建议我使用抽象类Board,然后创建一个继承自UserBoard的{​​{1}},PicBoardPageBoard,但我认为也没用。我考虑过Board,但我不确定这是否是实现我正在尝试的正确方法。任何建议都将得到倾听和考虑,感谢您的帮助:)

PS:哦,对不起,如果标题不是很具描述性,但我找不到更好的标题。这个问题很难解释

1 个答案:

答案 0 :(得分:3)

选项1

创建一个班级BoardOwner。让所有具有董事会继承的模型,并让董事会与BoardOwner建立外键关系。然后,您需要扫描各种子链接以确定哪个是“真正的”子项。这更加繁琐,但在一个班级中将所有复杂性本地化。

选项2

从每个有董事会董事会的班级都有一个外键。如果你总是有电路板通过所有者的方法进入你的系统(而不是Board或其他地方的查询),你可以在所有者的代码中让Board知道哪个外键反转与使用的关系。您可能希望将该代码分解为自己的类。

选项3

使用contenttypeshttps://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/

这包含了这种事情。

相关问题