Как изменить выпадающие списки Many-to-many в админке Django?
Помогите, пожалуйста, с выводом полей Many-to-many в админке Django.
Код из models.py (для облегчения восприятия оставил только ключевые поля):
class Album(models.Model):
title = models.CharField(max_length=200)
class Song(models.Model):
album = models.ManyToManyField('Album', through='AlbumSong')
class AlbumSong(models.Model):
album = models.ForeignKey('Album')
song = models.ForeignKey('Song')
serial_number = models.CharField(max_length=3)
Код из admin.py:
class SongsInline(admin.TabularInline):
model = AlbumSong
fields = ['song', 'serial_number']
extra = 0
@admin.register(Album)
class AlbumAdmin(admin.ModelAdmin):
inlines = [SongsInline]
Это скриншот страницы редактирования альбома на текущий момент.
Как разрешить следующие проблемы:
В каждом выпадающем списке отображаются все имеющиеся песни из модели/таблицы "Song". Как отобразить только те, которые привязаны к текущему альбому? Сейчас в списке выпадают вообще все имеющиеся песни со всех альбомов.
Если песен будет 100 штук, то и выпадающих списков будет 100 штук. Ежу понятно, что редактировать это сложно. Я пробовал создавать форму и в ней переопределять поле. Вместо TabularInline использовал ModelMultipleChoiceField. Но такое поле не дает возможности редактировать и создавать новые песни. Может есть какие-то другие решения? То есть надо иметь возможность создавать песни, редактировать их (в том числе поле "номер песни"), удалять.
