【问题标题】:Should I use generic foreign key with Django, and how?我应该在 Django 中使用通用外键,以及如何使用?
【发布时间】:2014-10-10 16:08:33
【问题描述】:

我有 php web 编程背景,并且是 Django 新手。我正在帮助我的兄弟建立一个在线系统来管理库存,并且我最近遇到了数据库设计和编码问题。需要帮助!

如何将“cmets”表附加到 1 个或多个表?

也就是说,我有一组“可能的产品”、“库存”、“供应商”等表格。我想为每个表格附加一个“cmets”,其中“cmets”包含所有评论他们的记录。因此,我认为我应该制作一个通用的“评论”表来保存产品、库存、供应商的所有 cmets。对吗?

我的桌子的概念模型:

可能的产品

id: int (pk)
name: varchar
url: varchar
price: decimal
created_at: datetime
updated_at: datetime

cmets

id: int (pk)
parent_id: int (fk)
content: text
author: int (fk)
table: char (which the table this comment belongs to)
created_at: datetime
updated_at: datatime

我的问题是,当“possible_products”表是“comment”的父表时,父表的外键(id 号)存储在“comment”表中以便链接它们。

但是,“库存”表和“供应商”表的 fk 怎么样?不应该是这样:我在“cmets”表中创建了另外 2 个“inventory_id”或“suppiler_id”列。 (也就是说,当我想链接第 4 个父表时,我不应该创建第 4 列。)

那么,我应该使用 Django 的通用外键吗? (所以,我的“评论”表设计是正确的。)以及如何使用/实现它?

或者,我应该/用外键制作一个中间表来连接“可能的产品”/“库存”/“卖家”和“cmets”更好吗?(关于设计......就像一个多对- 多关系)

附:我主要在 Django Admin 中开发系统。使用 Python 3.4 和 Django 1.7rc2。

【问题讨论】:

    标签: database django foreign-keys comments


    【解决方案1】:

    首先,您不应该考虑数据库列:您应该考虑 Django 模型。

    这确实是泛型关系的用途。而不是从 Comment 到每个单独模型的外键,您有一个 ContentType 模型的外键 - 它标识模型类型,而不是实例 - 和一个 object_id 字段,它存储相关模型的实际 ID。这在generic relations documentation中都有很好的解释。

    注意:如果您的模型将链接到一组非常具体且有限的“父”模型,则只需为其链接的每个模型添加一个外键可能会更简单。 p>

    【讨论】:

    • 感谢您的帮助!我已经阅读了通用关系文档。但是,它很复杂,我不明白...您能告诉我如何使用它吗?
    • 我链接到的页面有一个确切示例说明如何操作:代码 sn-p 和详细的分步说明。你到底有什么问题?
    猜你喜欢
    • 2020-08-08
    • 2015-04-02
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 2016-08-28
    • 2016-04-30
    相关资源
    最近更新 更多