如何在Django Admin中实现多对一的多选方案?

时间:2014-06-11 19:53:42

标签: python django django-models django-admin

场景:专辑有多首歌曲。一首歌有多位艺术家,可以没有或有一张专辑。

我使用ForeignKey实现了ManyToOne关系。以下是模型:

class Artist(models.Model):
    name = models.CharField(max_length=50, verbose_name=u'Artist Name')
    bio = models.TextField()

class Album(models.Model):
    title = models.CharField(max_length=50, verbose_name=u'Album Name')
    description = models.TextField()

class Song(models.Model):
    title = models.CharField(max_length=50, verbose_name=u'Song Name')
    album = models.ForeignKey(Album, null=True)
    artists = models.ManyToManyField(Artist)

现在,在Django Admin中,在New Album页面上,我想为该专辑选择多首歌曲。

奖金问题:我还需要获得某张专辑的艺术家。有没有更好的方法来实现它,而不是从songs_set获得所有的艺术家?

编辑:更新了歌曲 - 艺术家与ManyToMany的关系。

1 个答案:

答案 0 :(得分:0)

查看管理员文档,尤其是InlineModelAdmin objects

from django.contrib import admin

class SongInline(admin.TabularInline):
    model = Song

class AlbumAdmin(admin.ModelAdmin):
    inlines = [
        SongInline,
    ]

admin.site.register(Album, AlbumAdmin)

要回答第二个问题,您可以通过QuerySet过滤器调用来跨越关系,如下所示:

Artist.objects.filter(
    song_set__album=GIVEN_ALBUM
)