2014-10-21 4 views
0

나는이 Allmovie 영화의 이름을 저장 같은 모델,
AllmovieTheater
AllMovieShowtime 극장장고 외래 키 쿼리

class AllMovie(models.Model): 
    link = models.URLField() 
    title = models.CharField(max_length=100, null=True) 
    releaseday = models.CharField(max_length=100, null=True)    
    def __unicode__(self): 
     return '%s' % (self.title) 

class AllMovieTheater(models.Model): 
    allmovietheater = models.ForeignKey(AllMovie,null=True,blank=True) 
    movie_theater = models.CharField(max_length=255, null=True)  
    def __unicode__(self): 
     return '%s' % (self.movie_theater) 

class AllMovieShowtime(models.Model): 
    theater = models.ForeignKey(AllMovieTheater, null=True,blank=True,related_name = 'theater') 
    movie = models.ForeignKey(AllMovie, null=True,blank=True,related_name = 'movie') 
    time = models.CharField(max_length=100, null=True) 
    def __unicode__(self): 
     return '%s' % (self.time) 

의 재생 시간을 절약이 영화를 재생 극장을 저장해야 예 : 영화 'ABC'가 극장 슈퍼 연극 및 맨션 극장에 있음
슈퍼 연극에서 공연 시간을 알고 싶습니다.

Movie |  theater   | showtime 
ABC  super theater   8:00 
            9:30 

Movie |  theater   | showtime 
ABC   man theater   8:00 
            10:00 

그러나 쿼리하는 방법을 알지 못합니다. 나를

답변

1

영화는 많은 극장에서 연주하고, 연극은 많은을 표시 할 수 있습니다 영화 산업. 따라서 "영화"모델과 "극장"모델 간의 관계는 다 대다 관계 여야하며 "쇼 타임"은이 관계를 제어하는 ​​데 사용될 중간 모델입니다.

class Movie(models.Model): 
    link = models.URLField() 
    title = models.CharField(max_length=100, null=True) 
    releaseday = models.CharField(max_length=100, null=True)    
    def __unicode__(self): 
     return '%s' % (self.title) 

class Theater(models.Model): 
    movies = models.ManyToManyField(Movie, null=True, blank=True, through="ShowTime") 
    theater = models.CharField(max_length=255, null=True)  
    def __unicode__(self): 
     return '%s' % (self.movie_theater) 

class ShowTime(models.Model): 
    theater = models.ForeignKey(Theater, null=True, blank=True) 
    movie = models.ForeignKey(Movie, null=True, blank=True) 
    time = models.CharField(max_length=100, null=True) 
    def __unicode__(self): 
     return '%s' % (self.time) 

극장 "최고"의 영화 "ABC"의 쇼 타임을 알고 :

>>> ShowTime.objects.filter(theater__theater="super", movie__title="ABC") 
[<ShowTime: ShowTime object>, <ShowTime: ShowTime object>] 
>>> ShowTime.objects.filter(theater__theater="super", movie__title="ABC")[0].time 
'8:00' 
>>> ShowTime.objects.filter(theater__theater="super", movie__title="ABC")[1].time 
'10:00' 
+0

감사합니다! 나는 남쪽으로 많은 사람들에게 편집하지만, 이주에는 오랜 시간이 걸렸습니다. 그것이 실행 중인지 압도적인지 알지 못합니다.이 문제를 아십니까? – user2492364

0

obj2보다가 검색어 세트 개체입니다 감사

>>>obj = AllMovie.objects.get(title='ABC') 
<AllMovie: ABC> 
>>>obj2 = allmovietheater_set.filter(movie_theater=’super theater') 
[<AllMovieTheater: super theater> 
>>>obj3 = obj2.theater_set.all() 
AttributeError: 'QuerySet' object has no attribute 'theater_set' 

가르쳐주세요 : 그리고 내 쿼리 오류가 있습니다.

어떤 이터레이터처럼 obj2의 요소에 액세스해야합니다.

당신의 상황을 위해, OBJ3 얻을 수있는 가능한 방법은 다음과 같습니다

obj3 = [x.theater_set.all() for x in obj2] 
0

당신이 뭔가를 시도해야 :

AllMovieShowtime.objects.filter(movie__title="ABC",theater__movie_theater="super theater")