|
Оглавление
|
Изменения, которые мы сделали ранее —
null=True, blank=True и
Помимо этого, интерфейс администратора предоставляет множество
возможностей настроить его работу для конкретной модели. Эти
настройки реализуются с помощью классов
Давайте погрузимся в настройку интерфейса, определив поля,
которые будут отображатся в списке редактирования для нашей
модели class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True, verbose_name='e-mail')
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
В результате список изменения обьектов
Мы можем изменить это стандартное поведение, добавив в список дополнительные поля. Было бы удобно, например, если бы на этой странице отображался адрес электронной почты автора и можно было сортировать по имени и фамилии.
Чтобы это реализовать определим класс
from django.contrib import admin
from mysite.books.models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
admin.site.register(Publisher)
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book)
Вот, что мы сделали:
Внеся новые настройки, обновляем страницу списка редактирования авторов, и вы увидите, что на странице теперь отображается три колонки — имя, фамилия и email-адресс. К тому же, можно производить сортировку по колонкам с помощью нажатия на их заголовок. (См. рисунок «Страница списка редактирования авторов с опцией list_display»):
Теперь добавим простую панель поиска. Добавьте
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name')
Обновите страницу и вы увидите панель поиска
вверху. (См. рисунок «Страница списка редактирования авторов с опцией search_fields».) Мы просто указали
странице со списком редактирования, чтобы она отобразила
панель поиска, которая производит поиск по полям
Теперь добавим фильтр по дате к странице списка редактирования
модели from django.contrib import admin
from mysite.books.models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name')
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
admin.site.register(Publisher)
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book, BookAdmin)
Так как мы работаем с другим набором настроек, мы создали
отдельный класс
Параметр
Ещё одним способом фильтрации по дате является использование
опции class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
К странице списка редактирования сверху добавляется развернутая панель навигации по дате, как показано на рисуноке «Страница списка редактирования книг с опцией date_hierarchy». Она начинается со списка доступных годов, затем месяцев и дней.
Обратите внимание, опция
Теперь изменим сортировку по-умолчанию, чтобы на странице
списка редактирования, книги сортировались по дате публикации
в направлении убывания. По-умолчанию, объекты сортируются в
соответствии с атрибутом class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
Опция Обновим страницу списка редактирования. Обратите внимание, что возле заголовка поля даты публикации появилась стрелка, указывающая на направление сортировки. (См. рисунок «Страница списка редактирования книг с сортировкой».)
Мы рассмотрели основные настройки. Используя их, можно создать функциональный и удобный интерфейс администратора всего парой строк кода. Так же, как и со списками редактирования, форма редактирования может быть настроена множеством способов.
Сначала определим порядок отображения полей. По-умолчанию,
поля отображаются в том же порядке, в каком они были
определены в моделе. Мы можем изменить этот порядок с помощью опции
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
fields = ('title', 'authors', 'publisher', 'publication_date')
Теперь форма редактирования для книг будет использовать указаный порядок полей. Более естественно, если название книги будет идти перед автором. Конечно, порядок полей зависит от вашего способа работы с данными. Все формы разные. Другой полезной особенностью, которую предоставляет опция fields является исключение определённых полей из списка редактирования. Просто уберите из списка поля, которые требуется исключить. Вы можете использовать это в случае, когда вашим административным пользователям позволено редактировать только определённые части данных или если часть полей изменяется с помощью внешнего автоматизированного процесса. Например, в нашей базе с книгами, мы можем спрятать поле publication_date: class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
fields = ('title', 'authors', 'publisher')
В результате, форма редактирование книг не предоставляет возможности изменения даты публикации. Это может быть полезно в случае, если вы издатель, которые предпочитает, чтобы его авторы не отодвигали даты публикаций. (Естественно, это чисто гипотетический пример.) Когда пользователь использует эту неполную форму для добавления книги, Django устанавливает publication_date в None — поэтому убедитесь, что поле имеет свойство null=True.
Другая часто используемая настройка формы редактирования
используется для полей типа многие-ко-многим. Как можно было
увидеть на форме редактирования для книг, интерфейс
администратора представляет каждое поле типа
Интенфейс администратора предоставляет решение —
filter_horizontal. Добавим его в
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
filter_horizontal = ('authors',)
(Обратите внимание, что мы удалил параметр fields.) Обновите страницу и вы заметите, что поле «Автор» теперь использует удобный javascript-интерфейс фильтрации, который позволяет искать среди элементов и перемещать выбранных авторов в поле выбранных и наоборот.
Мы настоятельно рекомендуем использовать
filter_horizontal для полей
Классы
Опции filter_horizontal и
filter_vertical работают только с полями
Методом для решения этой задачи является использование опции
raw_id_fields. Укажите для неё кортеж с именами
полей class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
filter_horizontal = ('authors',)
raw_id_fields = ('publisher',)
Что вы будете вводить в это поле? Идентификатор издателя. Учитывая то, что люди не могут запомнить идентификаторы из базы данных, рядом находится иконка с увеличительным стеклом, которую вы можете нажат для отображения окна, на котором вы можете выбрать требуемого издателя. |
Увидели ошибку?
Выделите её мышкой и нажмите
-
Обработано:
1049
49
130
71
Версия книги
1.0
2.0
Версия 2.0 в процессе перевода!
Мой луч
Многообразие света
Полезное
Актуальные вакансии,
Python работа
для python-разработчиков.
Скачать в формате
CHM от 2 сентябряЗаказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта. Чем чаще заказываете — тем больше перевожу. Русская группа
Ускорить процесс перевода!
R130494980980
Z425285133788 E112528079659 U327380922061 Книга помогла реализовать:
|
| © 2008-2009 Ruslan Popov @ gmail.com | Powered by Django 1.1 beta 1 SVN-11114 |