Как изменить выпадающие списки 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]

Это скриншот страницы редактирования альбома на текущий момент

Это скриншот страницы редактирования альбома на текущий момент.

Как разрешить следующие проблемы:

  1. В каждом выпадающем списке отображаются все имеющиеся песни из модели/таблицы "Song". Как отобразить только те, которые привязаны к текущему альбому? Сейчас в списке выпадают вообще все имеющиеся песни со всех альбомов.

  2. Если песен будет 100 штук, то и выпадающих списков будет 100 штук. Ежу понятно, что редактировать это сложно. Я пробовал создавать форму и в ней переопределять поле. Вместо TabularInline использовал ModelMultipleChoiceField. Но такое поле не дает возможности редактировать и создавать новые песни. Может есть какие-то другие решения? То есть надо иметь возможность создавать песни, редактировать их (в том числе поле "номер песни"), удалять.


Ответы (0 шт):