我正在制作简单的评级和评论应用程序,以添加到我的项目中,并正在寻找有关创建模型的建议。
通常,我会创建这样的数据库模式:
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新手我不知道当地人做了什么。
谢谢!
答案 0 :(得分:2)
我认为你要找的是一个通用关系,你可以在contenttypes框架中找到这种类型的东西:https://docs.djangoproject.com/en/1.0/ref/contrib/contenttypes/#generic-relations