[英]django models query ManyToMany field
我想查询“一部电影在哪些剧院上映?”
我在这里有一个模型:
class Movie(models.Model):
link = models.URLField()
title = models.CharField(max_length=255, null=True)
class MovieTheater(models.Model):
movietheater = models.ManyToManyField(Movie,null=True,blank=True,through="MovieShowtime")
movie_theater = models.CharField(max_length=255, null=True)
city = models.CharField(max_length=255, null=True) #east west north south
class MovieShowtime(models.Model):
theater = models.ForeignKey( MovieTheater, null=True,blank=True,related_name = 'theater' )
movie = models.ForeignKey( Movie, null=True,blank=True,related_name = 'movie' )
time = models.TextField(null=True,blank=True)
如果使用此shell:我将获得所有MovieShowtime
对象
obj = Movie.objects.get(link='www.test.com')
obj.movie.all()
但是MovieShowtime
对象属于许多MovieTheater
因此当我将其打印出来时,它将获得很多重复的Theater_id
for i in obj.movie.all():
print i.theater_id
69
69
78
78
78
76
76
75
83
我怎样才能只获得69、78、76、75、83而无重复,这样我才能知道这部电影是在哪个剧院上映的
还是有一种方法可以直接获取movie_theater名称(field: movie_theater
)而不是Theater_id?
喜欢 :
'AMC'
'FOX'
'BLABLABLA'
我试了一下,仍然不知道。 请指导我,非常感谢。
Django提供了使用distinct()
功能避免重复的功能。 https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct
Django还提供了通过使用values()
功能仅返回必要字段的功能。 https://docs.djangoproject.com/en/dev/ref/models/querysets/#values
将两者结合起来可以为您提供所需的功能。
要返回不同的剧院ID ...
for i in obj.movie.all().values('theater').distinct():
print i['theater']
要返回不同的剧院名称...
for i in obj.movie.all().values('theater__movie_theater').distinct():
print i['theater__movie_theater']
您应该仔细阅读文档 ,您的案例可能恰好是示例中的案例,因此最终将得到如下查询:
mt_names = [mt.name for mt in MovieTheater.objects.filter(movietheater__link="www.test.com")]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.