繁体   English   中英

Django外键查询

[英]Django foreignkey query

我有一个像这样的模型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

但是我不知道如何查询它。 而且我的查询有错误:

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

请教我谢谢

电影可以在许多剧院播放,而剧院则可以播放许多电影。 因此,“电影”模型和“剧院”模型之间的关系应该是多对多关系,而“ ShowTime”是用于控制这种关系的中间模型。

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”在剧院“ super”中的放映时间:

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

obj2是QuerySet对象。

您应该像其他迭代器一样访问obj2的元素。

对于您来说,获取obj3的可能方法是:

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

您是否尝试过类似的方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM