Сегодня настала очеред поведать про фичи версии 1.4, относящиеся к административному интерфейсу Django. Предыдущие части 0, 1, 2, 3.
HTML5 Doctype
Разработчики сменили доктайп с HTML 4.01 Transitional и XHTML 1.0 Strict на более современный так называемый “HTML5 doctype” с сокращённой записью <!DOCTYPE html>, который также заставляет современные браузеры рендерить страницы в “standards mode”, так что ничего особо нового, хотя шуму много и в чейнджлоге где-то вверху списка новшество.
Пользовательские фильтры в админке
Начиная с версии 1.4 теперь официально задокументирован API по созданию пользовательских фильтров на страницах ChangeList с табличным представлением данных моделей. Ранее известный под именем FilterSpec, новый способ создания фильтров вполне себе приятен. Вот пример из доков с переведёнными комментариями:
Можно менять внешний вид фильтров посредством пользовательских шаблонов, динамически на основе запроса менять набор фильтров, возвращаемых функцией lookups. Стандартные фильтры типа BooleanFieldListFilter и DateFieldListFilter по-прежнему считаются "внутренним" API и не документируются, хотя никто не запрещает ими пользоваться на свой страх и риск:
Множественная сортировка в админке
Наконец-то стало возможно сортировать данные в ChangeList'е не только по одной колонке, а по нескольким сразу. Кроме стандартного атрибута ordering, можно задать пользовательскую сортировку через ModelAdmin.get_ordering() в зависимости от значения request или вручную через GUI. На скриншоте пример админки этого сайта (аж 4 сортировки в разных направлениях):
Новые методы ModelAdmin
Добавилось целых три метода:
ModelAdmin.save_related(self, request, form, formsets, change)
Продложение следует...
Осталось ещё несколько интересных тем, которые мы раскроем в ближайшие дни, вероятно, даже до релиза.
HTML5 Doctype
Разработчики сменили доктайп с HTML 4.01 Transitional и XHTML 1.0 Strict на более современный так называемый “HTML5 doctype” с сокращённой записью <!DOCTYPE html>, который также заставляет современные браузеры рендерить страницы в “standards mode”, так что ничего особо нового, хотя шуму много и в чейнджлоге где-то вверху списка новшество.
Пользовательские фильтры в админке
Начиная с версии 1.4 теперь официально задокументирован API по созданию пользовательских фильтров на страницах ChangeList с табличным представлением данных моделей. Ранее известный под именем FilterSpec, новый способ создания фильтров вполне себе приятен. Вот пример из доков с переведёнными комментариями:
from django.utils.translation import ugettext_lazy as _
from django.contrib.admin import SimpleListFilter
class DecadeBornListFilter(SimpleListFilter):
# Человекопонятное название фильтра
title = _('decade born')
# Название пармаетра, корое будет фигурировать в урле
parameter_name = 'decade'
def lookups(self, request, model_admin):
"""
Пары значение-заголовок для пользовательского фильтра
"""
return (
('80s', _('in the eighties')),
('90s', _('in the nineties')),
)
def queryset(self, request, queryset):
"""
Непосредственная фильтраций QuerySet
на основе взначения фильтра из self.value()
"""
if self.value() == '80s':
return queryset.filter(birthday__year__gte=1980,
birthday__year__lte=1989)
if self.value() == '90s':
return queryset.filter(birthday__year__gte=1990,
birthday__year__lte=1999)
class PersonAdmin(ModelAdmin):
list_filter = (DecadeBornListFilter,)
Можно менять внешний вид фильтров посредством пользовательских шаблонов, динамически на основе запроса менять набор фильтров, возвращаемых функцией lookups. Стандартные фильтры типа BooleanFieldListFilter и DateFieldListFilter по-прежнему считаются "внутренним" API и не документируются, хотя никто не запрещает ими пользоваться на свой страх и риск:
class PersonAdmin(ModelAdmin):
list_filter = (
('is_staff', BooleanFieldListFilter),
)
Множественная сортировка в админке
Наконец-то стало возможно сортировать данные в ChangeList'е не только по одной колонке, а по нескольким сразу. Кроме стандартного атрибута ordering, можно задать пользовательскую сортировку через ModelAdmin.get_ordering() в зависимости от значения request или вручную через GUI. На скриншоте пример админки этого сайта (аж 4 сортировки в разных направлениях):
Новые методы ModelAdmin
Добавилось целых три метода:
ModelAdmin.save_related(self, request, form, formsets, change)
Позволяет добавить дополнительную обработку при сохранении формсетов с инлайнами после того, как родительская сущность сохранена. Метод дополняет существующие save_model() и save_formset(), позволяя вынести необхоимую пре- или пост-обработку в отдельный метод не хакая неподохдящие response_change() and response_add().
ModelAdmin.get_list_display(self, request)
ModelAdmin.get_list_display_links(self, request, list_display)Кастомизация свойств list_dispaly и list_display_links на основе request. Например, так можно настроить разное количество колонок в зависимости от прав пользователя, получив доступ к переменной request.user.
Инлайны учитывают права пользователей
Теперь инлайны в админке разрешаю выполнять только те действия, на которых есть права у данного пользователя. Для редактирования M2M-связей используются права от связанной модели (если промеждуточная таблица создана автоматически и не имеет своих прав доступа). Ранее до 1.4 можно было редактировать любые сущности через inline-формы админки , даже если у вас не было на это прав (главное, чтобы были права на «родительскую» сущность).
ADMIN_MEDIA_PREFIX Deprecated
Добавлено
Опция ADMIN_MEDIA_PREFIX считается устаревшей и более не используется в админке для построения урлов к статике. Следуя изменениям в 1.3, связанными с появлением функциональности contrib.staticfiles, начиная с 1.4 теперь вместо ADMIN_MEDIA_PREFIX используется <STATIC_URL>/admin/. Это обратно несовместимое изменение, так что если у вас не был правильно настроен STATIC_URL и STATIC_ROOT на отдачу статики, либо вы отдавали статику админки по hardcoded-пути, стоит всё проверить перед апдейтом.
ModelAdmin.get_list_display(self, request)
ModelAdmin.get_list_display_links(self, request, list_display)Кастомизация свойств list_dispaly и list_display_links на основе request. Например, так можно настроить разное количество колонок в зависимости от прав пользователя, получив доступ к переменной request.user.
Теперь инлайны в админке разрешаю выполнять только те действия, на которых есть права у данного пользователя. Для редактирования M2M-связей используются права от связанной модели (если промеждуточная таблица создана автоматически и не имеет своих прав доступа). Ранее до 1.4 можно было редактировать любые сущности через inline-формы админки , даже если у вас не было на это прав (главное, чтобы были права на «родительскую» сущность).
ADMIN_MEDIA_PREFIX Deprecated
Добавлено
Опция ADMIN_MEDIA_PREFIX считается устаревшей и более не используется в админке для построения урлов к статике. Следуя изменениям в 1.3, связанными с появлением функциональности contrib.staticfiles, начиная с 1.4 теперь вместо ADMIN_MEDIA_PREFIX используется <STATIC_URL>/admin/. Это обратно несовместимое изменение, так что если у вас не был правильно настроен STATIC_URL и STATIC_ROOT на отдачу статики, либо вы отдавали статику админки по hardcoded-пути, стоит всё проверить перед апдейтом.
Продложение следует...
Осталось ещё несколько интересных тем, которые мы раскроем в ближайшие дни, вероятно, даже до релиза.
Комментариев нет:
Отправить комментарий