Django:基于相关字段的不同QuerySet



在我的Django应用中,我允许用户按类别创建电影集合。这是用3个模型来表示的,电影、集合和加法(加法模型存储电影、集合和用户实例)。三个模型的简化版本如下:

class Movie(models.Model):
    name = models.CharField(max_length=64)
class Collection(models.Model):
    name = models.CharField(max_length=64)
    user = models.ForeignKey(User)
class Addition(models.Model):
    user = models.ForeignKey(User)
    movie = models.ForeignKey(Movie)
    collection = models.ForeignKey(Collection)

例如,用户可以创建一个名为"80年代电影"的集合,并将电影"印第安纳琼斯"添加到他们的集合中。

我的问题是:如何根据一组查询过滤器显示不同的电影列表?现在我得到了一堆副本的那些电影已经添加到多个集合。我通常会使用distinct()来获取不同的对象,但在本例中,我需要不同的电影而不是不同的添加,但我需要查询加法模型,因为我想允许用户查看他们的朋友添加的电影。

我是否以最优的方式设置了我的模型?如有任何建议/帮助,我将不胜感激。

谢谢!

第一。我认为这里不需要Addition模型。您尝试创建多对多关系,但是文档中有这样做的方法:

class Movie(models.Model):
    name = models.CharField(max_length=64)
class Collection(models.Model):
    name = models.CharField(max_length=64)
    user = models.ForeignKey(User)
    movies = models.ManyToManyField('Movie', blank=True, null=True)

。文档说:"要引用"反向"关系,只需使用模型的小写名称"。

所以答案是(对于上面的设置):

Movie.objects.filter(collection__user=user).distinct()

相关内容

  • 没有找到相关文章

最新更新