Skip to main content
 首页 » 编程设计

python之Django:多态外键关系

2024年08月30日34findumars

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

我有一个模型 User,它可以通过 Comment 模型评论其他用户、图片、页面(大写是因为它们是模型)。为了整理所有评论,我创建了 Board 模型,它有一个所有者并接收发给该所有者的所有评论。问题是我不知道它的主人怎么样,即它属于哪个型号。它可以是图片的板,也可以是用户的板。所以我最终得到了这样一个模型:

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

我存储所有者的 ID 和所有者的类别以便能够执行其他任务,但这个解决方案根本无法说服我。 friend 建议我使用抽象类Board,然后创建UserBoard、PicBoard、PageBoard,其中继承自 Board,但我认为这也没有用。我考虑过 GenericRelations,但我不确定这是否是实现我正在尝试的目标的正确方法。我们会听取和考虑任何建议,感谢您的帮助:)

PS:哦,如果标题描述性不强,我很抱歉,但我想不出更好的标题。这个问题很难解释

请您参考如下方法:

选项 1

创建一个类 BoardOwner。让所有有板子的模型都继承自它,并让板子与 BoardOwner 有外键关系。然后您需要扫描各种子链接以找出哪个是“真正的”子链接。这更繁琐,但将所有复杂性都集中在一个类中。

选项 2

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

选项 3

使用内容类型:https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/

这样就结束了。