2014-12-19 101 views
0

我想查询'一部电影是由哪个剧院播放?'django模式查询ManyToMany字段

我这里有一个模型:

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)    

,如果我用这个壳: 我会得到所有的MovieShowtime对象

obj = Movie.objects.get(link='www.test.com') 
obj.movie.all() 

MovieShowtime对象是属于许多MovieTheater 所以当我打印出来,它会得到很多重复的剧院_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名(现场:movie_theater )不是theatre_id直接??
喜欢:

'AMC' 
'FOX' 
'BLABLABLA' 

我揣摩了一会儿,还是不知道。 请引导我非常感谢你。

回答

1

Django提供了避免与distinct()功能重复的功能。 https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct

Django还提供了仅返回使用values()功能所需的字段的功能。 https://docs.djangoproject.com/en/dev/ref/models/querysets/#values

结合这两个应该给你你正在寻找的功能。

要返回不同的影院IDS ...

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'] 
0

您应仔细阅读documentation,你的情况可能是完全一个在例如,所以你最终会得到如下查询:

mt_names = [mt.name for mt in MovieTheater.objects.filter(movietheater__link="www.test.com")] 
相关问题