Добавление встроенных в многие объекты в Django admin
Я новичок в Django и прочитал документацию по ее реляционным моделям и встроенным формам администратора (docs on InlineModelAdmin). Я изо всех сил пытаюсь понять, можно сделать следующее из коробки, или если я должен перевернуть свои собственные формы.
Скажем, у меня есть два объекта: "Фильмы и режиссеры", это отношение "многие ко многим", как определено в объявлениях модели следующим образом:
class Film(Model):
director = ManyToManyField('Director')
Теперь в форме детали для объекта Film я хотел бы добавить встроенные объекты Director (они просто имеют поле имени как единственное свойство). Не только выбор существующих экземпляров, но и возможность создания новых, встроенных в виде объекта Film.
class DirectorInline(admin.TabularInline):
model = Director
extra = 3
class FilmAdmin(admin.ModelAdmin):
inlines = (
DirectorInline,
)
Это вызывает ошибку, поскольку она ожидает внешний ключ объекта Director.
Является ли то, что я пытаюсь достичь, без создания пользовательской формы, валидатора и т.д.?
Любые советы в правильном направлении были бы очень благодарны, спасибо заранее.
Ответы
Ответ 1
Виджет по умолчанию для поля Много-ко-многим в admin или widgets с атрибутом filter_vertical
или filter_horizontal
позволяет добавлять новые пункт. Рядом с полем есть зеленый знак "+", чтобы открыть всплывающее окно и добавить новый экземпляр Director.
Но если вам нужен встроенный администратор стиля, вы должны ссылаться на через модель. Если вы не укажете пользовательскую модель, Django создаст простую модель с 2 внешними ключами для директора и фильма.
Итак, вы можете попробовать создать встроенную строку, например
class DirectorInline(admin.TabularInline):
model = Film.director.through
extra = 3
Это не приведет к возникновению исключения и создаст встроенную форму, но вам придется выбирать директоров из раскрывающегося списка. Я думаю, вы можете перезаписать это с помощью пользовательской формы.