django admin many-to-many with intermediate model add new

Обновить

November 2018

Просмотры

208 раз

2

У меня есть следующие модели (упрощенно):

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качестве модели для SongInline, я получил сообщение об has no ForeignKeyошибке. Есть ли способ я могу оптимизировать / встраивать процесс добавления новых песен на концерте?

1 ответы

1

Оказывается, это функция по умолчанию, но интерфейс администратора должен быть включен для модели Song:

admin.site.register(Song)

После этого вы получите маленький плюсик. Скриншот Джанго администратора встроенного стола .