Django Admin: нужно условно отображать поля - PullRequest
9 голосов
/ 14 января 2011

Каков наилучший способ условного отображения поля в админке в зависимости от значений других полей?

В частности, я думаю о add_form и change_form. Когда бы ни был выбран определенный вариант, я бы хотел скрыть или отключить некоторые поля.

Я думаю, что для этого может потребоваться решение javascript, но мне интересно, есть ли лучший (т.е. встроенный) способ сделать это.

Ответы [ 3 ]

1 голос
/ 15 апреля 2013

Бернхард прав. Возможно, вам удастся взломать представление администратора и шаблон, чтобы условно отображать / не показывать виджеты для поля, но если вы хотите сделать это динамически в зависимости от поведения пользователя в администраторе, вы будете использовать javascript.

Это не так страшно, хотя. По крайней мере, шаблоны администратора Django имеют идентификаторы, специфичные для модели и экземпляра, чтобы предоставить вам детальный контроль над поведением «показать / скрыть».

0 голосов
/ 19 октября 2017

Мой ответ может показаться эзотерическим - но я подозреваю, что направление дизайна, которое вы, возможно, выберете, могло бы выиграть от некоторого пересмотра. Когда интерфейсу требуется столько TLC, чтобы прибегнуть к AJAX для создания превосходного UX, я склонен не использовать для этого интерфейс администратора.

Мое личное мнение об интерфейсе администратора Django заключается в том, что это отличная халява, которая дает мне мгновенное представление CRUD на базовом уровне. Я бы воздержался от поддержки этого для тех, кому нужен более удобный интерфейс (даже если некоторые из этих пользователей обрабатывают функции администратора). Вы приобретете техническую задолженность, пытаясь выполнить такие проверки Ajax UI / UX и сложных форм с помощью интерфейса администратора.

0 голосов
/ 25 марта 2015

Я думаю, вы должны иметь возможность создать свою собственную ModelForm и указать, что администратор использует это (https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form).

. Используйте метод _init __ () формы для выборочного отображения полей.

Я попытаюсь обновить этот ответ, если он будет работать.

(На самом деле перечитывание вопроса зависит от того, заданы ли «значения других полей» до загрузки страницы).эта идея должна работать. Если вы хотите получить мгновенный ответ - щелкните одно поле, и другое появится / исчезнет, ​​да, вам понадобится JavaScript).

...