django'多对多'关系应该在

时间:2017-07-16 23:08:00

标签: python django django-models

让我们说我有一个配方网站,有两个基本模型,'用户'和'食谱'

class User(models.Model):
    username= models.CharField()
    email = models.CharField()

class Recipe(models.Model):
    name = models.CharField()
    description = models.CharField()

我想添加功能,以便用户可以“喜欢”食谱。

在这种情况下,我需要使用多对多关系。我的问题是,我如何决定将关系添加到哪个模型?

例如,每个用户都可以拥有“最喜欢的”食谱列表:

class User(models.Model):
    favorites = models.ManyToManyField(Recipe)

或者,每个食谱都可以有一个收藏食谱的用户列表:

class Recipe(models.Model):
    user_favorites = models.ManyToManyField(User)

什么是最佳做法?是否有更好的查询性能?

1 个答案:

答案 0 :(得分:2)

正如评论中所指出的那样,从数据库的角度来看没有任何区别。

但我有两个论点,它对我来说很重要。

  • 首先(可能不那么重要),内置管理员默认以不同方式处理这两个模型。您定义关系的模型将获取用于选择相关对象的小部件。和'+'用于方便地添加相关类型的新对象。
  • 其次,如果它们位于不同的文件中,则必须导入另一个模型中的一个模型。如果您想编写一个不依赖于任何外部的可重用应用程序,这很重要。对我来说也很重要因为:
    我曾经(好吧,不只是一次:) :)打破了我的应用程序/数据库/等等,我决定启动一个新项目并在那里复制代码。在这种情况下,您必须注释掉一些settings.INSTALLED_APPS以测试步骤,以确保一切正常。这里重要的是不要有循环包含(包括注释掉的应用程序会引发错误)。所以我尝试将“最基本的”导入到其他人中,而不是相反。

这不是你问题的简单答案,而是我考虑的两点。也许一些经验丰富的用户可以在某种意义上纠正我。