从两个不同的模型在 Django 中建模收藏夹

Modeling favorites in Django from two different models

我正在创建一个 Netflix 克隆应用程序,但我在使用模型时遇到了问题。 我有一个电影模型,其中包含电影的字段,例如标题、持续时间、评级等。 我不确定我应该如何为我的数据库建模,但我认为我应该做的是多对多关系,例如,一个用户可以收藏多部电影,而一部电影可以被许多用户收藏。

但是,如果我这样做,我觉得我最终会得到一个收藏夹 table,它会有很多用户和电影,并且可能会认为这是一个必须遍历每一行才能找到的问题当前用户而不是做一个一对多的关系,比如一个用户可以收藏很多电影,一个电影可以被一个用户收藏。

首先,我不确定建模的正确方法是什么。

我也不知道如何将这种关系添加到我的用户模型中,因为我使用的是从 django.contrib.auth.models

引入的用户模型

我在想办法解决这个问题时遇到了很多麻烦,我不想只为用户添加一个多对多的字段到电影 table 中,我不知道是否以及为什么它是 good/bad 方法。

怎么样:

class User(...):

    first_name = models.CharField(...)
    ....

class Movie(models.Model):

    title = models.CharField(...)
    ...

class Favorite(models.Model):

    user = models.ForeignKey('User', related_name='favorites', ...)
    movie = models.ForeignKey('Movie', related_name='favorites', ...)

那么我们可以这样做:

# a particular user's favorite movies:
user = User.objects.get(id='the_user_id')
user.favorites.values('movie')

# number of users who have favorited a particular movie:
movie = Movie.objects.get(id='the_movie_id')
movie.favorites.count()