模型基于字段值链接到其他模型

时间:2013-06-17 19:15:20

标签: django django-models

我正在制作简单的评级和评论应用程序,以添加到我的项目中,并正在寻找有关创建模型的建议。

通常,我会创建这样的数据库模式:

comment_
    id - primary key
    type - varchar (buyer_item, buyer_vendor, vendor_buyer)
    source_id - int (primary key of the table based on the type)
    target_id - int (primary key of the table based on the type))
    timestamp - timestamp
    subject - varchar
    comment - text


rating_
    id - primary key
    type - varchar (buyer_item, buyer_vendor, vendor_buyer)
    source_id - int (primary key of the table based on the type)
    target_id - int (primary key of the table based on the type)
    timestamp - timestamp
    rating - int (the score given, ie: 1-5 stars)

这将让我有简单的方法,允许我通过设置正确的类型和设置谁提交它的id(source_id)适用于(target_id)的id来对任何类型的事物应用注释或评级,例如:

add_comment('user_product', user.pk, product.pk, now, subject, comment)
add_comment('user_vendor', user.pk, vendor.pk, now, subject, comment)

我知道在模型中,您将其他表的关系定义为模型的一部分。如何在这些类型的表中定义关系,其中TYPE字段确定SOURCE_ID和TARGET_ID链接到哪个表。

或者我应该省略模型中的关系,并在获取QuerySet时设置连接?

或者只是删除那些常见表的想法,并为每个关系制作一大堆不同的表(例如:user_ratings,product_ratings,transaction_ratings等)?

这里的最佳做法是什么?我的DBA感觉说使用普通表,但Django新手我不知道当地人做了什么。

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为你要找的是一个通用关系,你可以在contenttypes框架中找到这种类型的东西:https://docs.djangoproject.com/en/1.0/ref/contrib/contenttypes/#generic-relations