【问题标题】:django admin many-to-many with intermediate model add newdjango admin 多对多与中间模型添加新
【发布时间】:2017-06-27 03:20:47
【问题描述】:

我有以下模型(简化):

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    原来这是一个默认功能,但必须为 Song 模型启用管理界面:

    admin.site.register(Song)
    

    然后你会得到一个小加号。 Screenshot of django admin inline table.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 2012-06-09
      • 2012-04-24
      • 2015-08-30
      • 2021-08-23
      • 2019-09-05
      • 2015-08-28
      相关资源
      最近更新 更多