2011-01-13 4 views
8

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

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

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

+3

Нет встроенного решения этой проблемы, если вы хотите, чтобы поля отображались динамически, вам всегда понадобится пользовательское решение javascript/ajax! –

+0

Спасибо, я думал, что это так. Я просто параноик о том, что я делаю «Неправильный путь». – IntrepidDude

ответ

1

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

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

+0

У меня есть такая же потребность, и мне интересно, где я бы поставил код javascript, который это делает. То есть в каком шаблоне? –

0

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

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

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

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

0

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

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

+0

На самом деле Бернхард Валант сказал мои точные мысли гораздо более лаконично. Я позову его. –

Смежные вопросы