包含与Django中的两个模型相关的信息
我需要创建一个模型来包含一组数据,这些数据与两个单独的模型相关,并且对于这两个模型的组合是唯一的 例如,假设我有一个用户包含与Django中的两个模型相关的信息,django,django-models,django-orm,Django,Django Models,Django Orm,我需要创建一个模型来包含一组数据,这些数据与两个单独的模型相关,并且对于这两个模型的组合是唯一的 例如,假设我有一个用户档案模型和一个甜点模型。Profile模型包含用户的偏好和个人信息,甜点模型包含甜点的相关信息(卡路里、成本、类型等)。我现在想创建一个模型,允许用户记录给定甜点的“味道测试”结果。每个用户都可以对每个甜点进行口味测试,但只能进行一次(即,每个用户/甜点组合的口味测试是唯一的) 我怎样才能做到这一点?这对于到(如下所述:)似乎不合适,因为大多数时候我都希望在没有味觉测试的情况下
档案
模型和一个甜点
模型。Profile
模型包含用户的偏好和个人信息,甜点
模型包含甜点的相关信息(卡路里、成本、类型等)。我现在想创建一个模型,允许用户记录给定甜点的“味道测试”结果。每个用户都可以对每个甜点进行口味测试,但只能进行一次(即,每个用户/甜点组合的口味测试是唯一的)
我怎样才能做到这一点?这对于到(如下所述:)似乎不合适,因为大多数时候我都希望在没有味觉测试的情况下访问甜点或用户档案(例如,显示甜点信息并将其与其他甜点进行比较)。通过
的将增加大量不必要的开销
我能想到的最佳解决方案是创建一个“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)`
这看起来可能是一个昂贵的查找(尽管我对DB的东西很不熟悉,这就是我为什么要问的原因)。通过表与建立多对多关系是正确的方法
在幕后,Django无论如何都会为多对多字段创建一个中间表,因此不必担心额外的查找开销。这是没有办法的。我个人从未觉得沙子特别好吃。但其他人可能不同意…@IgnacioVazquez Abrams你显然从未品尝过1984年的万宝龙撒哈拉精选酒。嗯。。。这是漫长的一天,谢谢。谢谢你的回复,很抱歉延误了回复。我有几个后续问题。如果我使用<代码>到<代码>,是否会为每个可能的用户/学院组合创建一个中间表(对不起,不确定这是否是正确的词)?如果是这样的话,这将意味着大量新的数据库内容,特别是当有任意多个用户和1000多个沙漠时。如果是这样的话,这是性能问题吗?第二,我目前正在配置文件和沙漠模型之间使用ManyToManyField
,以包含最受欢迎的沙漠列表。是否应该将其移动到through?为整个关系创建了一个中间表,而不是每个组合一个。该表将包含一列用户的主键和一列甜点的主键,再加上您得到的任何“味觉测试”结果。性能取决于数据库,但通常不是问题。对于最喜欢的问题-可能,但这不是严格要求。这样做可以避免一些冗余。