Django一对多查询

时间:2015-07-12 01:52:52

标签: sql django

Django新手在这里。

我创建了三个模型:Band,Album和AlbumType(Live,EP,LP)。专辑有两个外键(来自乐队和专辑类型)。好的,所以,在视图中做一个像这样的东西:

bandList = Band.objects.all()

要检索所有乐队,但我无法弄清楚如何在同一视图中获取乐队的所有专辑。

任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

默认情况下,相关对象(通过另一个模型上的ForeignKey)可通过<modelname>_set zo访问band.album_set(注意这是一个Manager属性,因此您将可能大部分时间都使用band.album_set.all()

我个人更喜欢给ForeignKey字段related_name,因此我可以在另一个模型上命名该属性。下一个示例为Band提供了属性band.albums

class Band(models.Model):
    # Band definition

class Album(models.Model):
    band = models.ForeignKey(Band, related_name='albums')
    # Rest of album definition

答案 1 :(得分:0)

如果您共享模型定义,可能会很棒。但我希望这会对你有所帮助:

如果您想检索特定乐队的专辑:

band = Band.objects.get(...)
band_albums = Album.objects.filter(band=band)

这将返回乐队的专辑。

如果您想要所有乐队的回溯专辑:

bandList = Band.objects.all().select_related('album_set')

这将像以前一样返回禁令,但会缓存相册。