我有三个模特
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]
它无法正常工作。请帮帮我。
答案 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内。
我还建议将bandname
和albumname
重新命名为band
和album
,因为它们指的是乐队或专辑模型实例,而不是实际名称乐队或专辑。如果您想在name
或Band
模型中添加Album
字段,那么以后就会感到困惑。