django管理员多对多与中间模型添加新的

时间:2017-06-25 16:27:41

标签: python django

我有以下模型(简化):

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错误。有没有办法可以简化/内联将新歌曲添加到音乐会的过程?

1 个答案:

答案 0 :(得分:1)

事实证明这是默认功能,但必须为Song模型启用管理界面:

admin.site.register(Song)

然后你得到小加号。 Screenshot of django admin inline table