在我的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()