场景:专辑有多首歌曲。一首歌有多位艺术家,可以没有或有一张专辑。
我使用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的关系。
答案 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
)