我需要创建一个模型来包含一组与两个独立模型相关的数据,并且这两个模型的组合是唯一的。
例如,假设我有一个用户Profile
模型和一个Dessert
模型。 Profile
模型包含用户的偏好和个人信息,Dessert
模型包含有关甜点的信息(卡路里,成本,类型等)。我现在想要创建一个模型,允许用户在给定的甜点上记录“味道测试”的结果。每个用户可以对每个甜点进行味道测试,但只有一个(即,每个用户/甜点组合的味道测试是唯一的)。
我怎样才能做到这一点?它似乎不适合through
(如此处所述:How do you bind a model to two other, already related models, and display the information?),因为大部分时间我都想要在没有品味测试的情况下访问甜点或用户的个人资料(例如,显示信息)关于甜点,并将其与其他甜点进行比较)。 through
会增加很多不必要的开销。
我能想出的最佳解决方案是创建一个'TasteTest'模型,如下所示:
class TasteTest(models.Model):
user_profile = models.ForeignKey(Profile)
dessert = models.ForeignKey(Dessert)
# Taste test results here
我有两个相关的问题。首先,这是最好/正确的方法吗?或者,还有更好的方法?其次,进行查找时涉及的数据库开销是多少?要在给定的甜点上访问给定用户的口味测试,我似乎必须做以下事情:
user.profile.tastetest_set.get(dessert=given_dessert.pk)`
这似乎可能是一个昂贵的查找(虽然我真的不熟悉数据库的东西,这就是我要问的原因。)
答案 0 :(得分:1)
与through
表的多对多关系是正确的方法。
https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships
在幕后,Django无论如何都会为多对多字段创建一个中间表,因此不必担心查找的额外开销。没有办法解决它。