我有以下模型(简化):
class Concert(models.Model):
title = models.CharField(max_length=50)
date = models.DateField()
songs = models.ManyToManyField(Song,
through='RunOrder',
related_name='run_order',
blank=True)
class Song(models.Model):
title = models.CharField(max_length=50)
class RunOrder(models.Model):
concert = models.ForeignKey(Concert, on_delete=models.CASCADE)
song = models.ForeignKey(Song, on_delete=models.CASCADE)
act_no = models.SmallIntegerField()
scene_no = models.SmallIntegerField()
基本上,歌曲可以是多场音乐会,音乐会有多首歌曲。
在管理视图中创建新的音乐会时,我希望能够添加新歌曲。这就是我所拥有的:
class ConcertAdmin(admin.ModelAdmin):
...
inlines = [SongInline]
class SongInline(admin.TabularInline):
model = RunOrder
show_change_link = True
extra = 1
但这只能让我从现有歌曲中选择。为了添加新歌,我必须使用Song管理界面。当我尝试使用Song
作为SongInline
的模型时,出现了has no ForeignKey
错误。有没有办法可以简化/内联将新歌曲添加到音乐会的过程?
答案 0 :(得分:1)
事实证明这是默认功能,但必须为Song模型启用管理界面:
admin.site.register(Song)
然后你得到小加号。 Screenshot of django admin inline table