如何在Django Admin中实现多对一的多选场景?
场景:一个专辑里有多首歌曲。一首歌曲可以有多个艺术家,并且可以没有专辑或只有一个专辑。
我使用外键实现了多对一的关系。以下是模型:
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的管理后台中,在新专辑页面,我想为这个专辑选择多首歌曲。
附加问题:我还需要获取某个专辑的艺术家。有没有比从歌曲集合中获取所有艺术家更好的方法?
编辑:将歌曲与艺术家的关系更新为多对多关系。
1 个回答
0
看看管理员文档,特别是关于 InlineModelAdmin
对象 的部分。
from django.contrib import admin
class SongInline(admin.TabularInline):
model = Song
class AlbumAdmin(admin.ModelAdmin):
inlines = [
SongInline,
]
admin.site.register(Album, AlbumAdmin)
关于你的第二个问题,你可以通过查询集的过滤调用来连接这些关系,像这样:
Artist.objects.filter(
song_set__album=GIVEN_ALBUM
)