基于相互关联的模型过滤

时间:2016-03-28 16:43:17

标签: django python-2.7

我有三个模特

class Song(models.Model):
    title = models.CharField(max_length=100)
    bandname = models.ManyToManyField(Band)
    albumname = models.ManyToManyField(Album)

class Band(models.Model):
    title = models.CharField(max_length=100)

class Album(models.Model):
    title = models.CharField(max_length=100)

现在我想列出特定乐队的所有专辑。

我在view.py

中尝试过这种方式
band = Band.objects.get(id=no)
song_list = band.song_set.all()
album = [i.bandname for i in song_list]

它无法正常工作。请帮帮我。

1 个答案:

答案 0 :(得分:1)

您实际上想要得到的是包含特定乐队歌曲的所有专辑的列表,无论是专有还是二重奏。以下是使用现有模型的方法:

band = Band.objects.get(id=target_band_id)
song_list = Song.objects.filter(bandname=band)
album_list = Album.objects.filter(song__in=song_list).distinct()

检查"反向m2m查询"在the Django Many to Many docs内。

我还建议将bandnamealbumname重新命名为bandalbum,因为它们指的是乐队或专辑模型实例,而不是实际名称乐队或专辑。如果您想在nameBand模型中添加Album字段,那么以后就会感到困惑。