Django 基于互相关模型的滤波器

Django 基于互相关模型的滤波器,django,python-2.7,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 Alb

我有三种型号

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)
现在我想列出一个特定乐队的所有专辑

我试过这种方法,in view.py

band = Band.objects.get(id=no)
song_list = band.song_set.all()
album = [i.bandname for i in song_list]

它不起作用了。请帮帮我。

看来你实际上想得到的是一张包含某个特定乐队歌曲的所有专辑的列表,无论是独家专辑还是二重唱专辑。以下是如何使用现有模型实现这一点:

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查询”


我还建议将
bandname
albumname
重新命名为
band
album
,因为它们指的是乐队或专辑模型实例,而不是乐队或专辑的实际名称。如果您想在
波段
相册
模型中添加
名称
字段,则以后会变得混乱。

您确定您的模型正确吗?一首歌怎么可能由多个乐队演唱?二重唱,可能是:)它给出了无法将关键字“song_set”解析为字段的错误。选择包括:id、标题、歌曲,所以我尝试了album\u list=album.objects.filter(song\u in=song\u list).distinct()它起作用了。非常感谢。