0

我需要创建一个模型来包含一组与两个独立模型相关的数据,并且对于这两个模型的组合是唯一的。

例如,假设我有一个用户Profile模型和一个Dessert模型。该Profile模型包含用户的偏好和个人信息,该Dessert模型包含有关甜点的信息(卡路里、成本、类型等)。我现在想创建一个模型,允许用户记录给定甜点的“味觉测试”结果。每个用户都可以对每个甜点进行口味测试,但只能进行一次(即,每个用户/甜点组合的口味测试是唯一的)。

我怎样才能做到这一点?它似乎不适合 a through(如此处所述:如何将模型绑定到其他两个已经相关的模型并显示信息?)因为大多数时候我希望在没有口味测试(例如,显示有关甜点的信息并将其与其他甜点进行比较)。Athrough会增加很多不必要的开销。

我能想出的最佳解决方案是创建一个“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)` 

这似乎是一个昂贵的查找(虽然我真的不熟悉数据库的东西,这就是我问的原因)。

4

1 回答 1

1

与表建立多对多关系through是正确的方法。

https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

在幕后,Django 无论如何都会为多对多字段创建一个中间表,因此不必担心查找的额外开销。没有办法解决它。

于 2013-07-05T21:54:32.160 回答