Как свернуть только одно поле в Django Admin? - PullRequest
4 голосов
/ 10 марта 2010

Администратор django позволяет указывать наборы полей . Вы правильно структурируете кортеж, который группирует различные поля вместе. Вы также можете указать классы для определенных групп полей. Одним из таких классов является коллапс, который скроет поле под складной областью. Это хорошо для сокрытия редко используемых или расширенных полей для поддержания чистоты пользовательского интерфейса.

Однако у меня есть ситуация, когда я хочу спрятать только одно одинокое поле во многих различных приложениях. Это будет много печатать, чтобы создать полную спецификацию набора полей в каждом файле admin.py, просто чтобы поместить одно поле в свернутую область. Это также создает сложную ситуацию с обслуживанием, потому что мне придется редактировать набор полей каждый раз, когда я редактирую связанную модель.

Я могу легко полностью исключить поле, используя параметр exclude . Я хочу что-то подобное для краха. Возможно ли это?

Ответы [ 3 ]

4 голосов
/ 27 марта 2010

У Django нет встроенного способа сделать это, о котором я знаю, но я могу придумать несколько способов, как вы могли бы сделать что-то один раз, вместо необходимости вручную изменять множество наборов полей.

Один из подходов - использовать javascript для переписывания разметки страницы. Возможно, javascript может иметь список имен полей, и всякий раз, когда он находит одно из них, он скрывает поле и его метку и добавляет кнопку на страницу для переключения этих невидимых полей.

Другой подход будет включать в себя Python. Обычно вы просто указываете атрибуты fieldsets в админке как кортеж. Но вы можете указать это как импортированную функцию, которая принимает обычный кортеж в качестве аргумента. В вашем файле настроек вы можете указать список имен полей, которые вы хотите скрыть. Затем вам нужно написать функцию, которая возвращает измененный кортеж, перемещая любые поля, которые соответствуют одному из ваших имен полей, в новый набор полей вместе с классом коллапса.

Например, в вашем классе администратора вы можете сделать что-то вроде этого (вам нужно написать и импортировать hide_fields).

fieldsets = hide_fields(
    (None,
        {'fields':('title', 'content')}
    )
)

В конечном итоге это может быть истолковано следующим образом, если предположить, что содержимое в файле настроек является чем-то, что вы хотите скрыть:

fieldsets = (
    (None,
        {'fields':('title',)}
    ),
    ('Extra',
        {
            'fields':  ('content',),
            'classes':('collapse',),
        }
    ),
)
0 голосов
/ 27 марта 2010

Я делаю что-то вроде этого, где у меня есть одно или несколько полей, которые требуются только на основе значения другого. Обычно это флажок или выберите, где истина / ложь или одно конкретное значение означает, что мы должны показать этот другой набор полей. Я добавил что-то вроде этого:

$(document).ready(function(){
    function show_hide() {
        var is_checked = $('#id_first_field').attr('checked');
        $('.second_field')[is_checked ? 'show' : 'hide']();
    }
    show_hide();
    $('#id_first_field').change(show_hide);
});
0 голосов
/ 19 марта 2010

Если вы хотите, вы можете использовать fieldset в вашем admin.py и поле, которое вы хотите свернуть, используйте класс как свернутый и оставаясь как foobar.

См. Django docs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...