我正在Django开发一种社交网络,但我没有看到保持耦合模型的方法。
我有一个模型User
,它可以通过Comment
模型评论其他用户,图片,页面(大写是因为它们是模型)。为了安排我创建董事会模型的所有评论,该模型有一个所有者并接收添加到该所有者的所有评论。问题是我不知道它的拥有者是什么,即它属于哪个模型。它可能是pic的主板,但也是用户的主板。所以我最终得到了这样的模型:
class Board(models.Model):
category = models.IntegerField()
owner_id = models.IntegerField()
我存储所有者的ID和所有者的类别,以便能够执行其他任务,但此解决方案根本不能说服我。一位朋友建议我使用抽象类Board
,然后创建一个继承自UserBoard
的{{1}},PicBoard
,PageBoard
,但我认为也没用。我考虑过Board
,但我不确定这是否是实现我正在尝试的正确方法。任何建议都将得到倾听和考虑,感谢您的帮助:)
PS:哦,对不起,如果标题不是很具描述性,但我找不到更好的标题。这个问题很难解释
答案 0 :(得分:3)
创建一个班级BoardOwner
。让所有具有董事会继承的模型,并让董事会与BoardOwner
建立外键关系。然后,您需要扫描各种子链接以确定哪个是“真正的”子项。这更加繁琐,但在一个班级中将所有复杂性本地化。
从每个有董事会董事会的班级都有一个外键。如果你总是有电路板通过所有者的方法进入你的系统(而不是Board
或其他地方的查询),你可以在所有者的代码中让Board
知道哪个外键反转与使用的关系。您可能希望将该代码分解为自己的类。
使用contenttypes
:https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/
这包含了这种事情。