django“多对多”关系应该站在哪一边

cor*_*ory 6 python django django-models

假设我有一个包含两个基本模型的食谱网站,“用户”和“食谱”

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

class Recipe(models.Model):
    name = models.CharField()
    description = models.CharField()
Run Code Online (Sandbox Code Playgroud)

我想添加该功能,以便用户可以“收藏”食谱。

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

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

class User(models.Model):
    favorites = models.ManyToManyField(Recipe)
Run Code Online (Sandbox Code Playgroud)

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

class Recipe(models.Model):
    user_favorites = models.ManyToManyField(User)
Run Code Online (Sandbox Code Playgroud)

什么被认为是最佳实践?任何一种对查询性能更好?

Ilj*_*lja 9

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

但是我有两个论据对我来说确实很重要。

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

这不是对您问题的简单回答,而是我考虑的两点。如果某种意义上说错了,也许一些更有经验的用户可以纠正我。