Теперь необходимо доработать проект. Во-первых, созданная ранее модель имеет название в виде непонятной аббревиатуры Bbs, вместо логичного названия Объявления. Во-вторых, страницы редактирования и добавления новой записи в качестве надписей элементов формы имеют имена полей модели (price, title и content), что неудобно. В-третьих, нет возможности отсортировать объявления по дате публикации. Одним словом, необходимо настроить основные параметры для модели и ее полей.
Откроем для редактирования модуль models.py приложения bboard и внесем изменения в код:
class Bb(models.Model): title = models.CharField(max_length=50, verbose_name= 'Товар') content = models.TextField(null=True, blank=True, verbose_name= 'Описание') price = models.FloatField(null=True, blank=True, verbose_name= 'Цена') publiched = models.DateTimeField(auto_now_add=True, db_index=True, verbose_name= 'Опубликовано') class Meta: verbose_name_plural = 'Объявления' verbose_name = 'Объявление' ordering = ['-published']
Именованный параметр verbose_name, добавленный в вызов каждого конструктора класса, позволяет добавить понятное пользователю название поля. В класс модели также добавлен вложенный класс Meta, в котором перечислены атрибуты класса с параметрами самой модели:
- verbose_name_plural – название создаваемой модели во множественном числе;
- verbose_name – название в единственном числе;
- ordering – набор полей, который будет использоваться для сортировки по умолчанию.
После сохранения изменений в коде и обновления страницы можно увидеть следующие изменения:
- в списке приложений модель теперь имеет название Объявления, вместо Bbs;
- на странице со списком записей запись модели теперь обозначается как Объявление, ранее было Bb;
- интерфейс панели редактирования и добавления записи содержат понятные пользователю надписи (Цена, Описание и Товар), вместо price, content и title соответственно.
Кстати, теперь можно упростить код контроллера index(), который объявлен в модуле views.py пакета приложения, убрав указание способа сортировки.
После внесенных изменений, стало удобнее работать, но некоторые неудобства остались. К примеру, на странице списка записей название позиций формируется по специальному шаблону: <имя класса> object(<ключ>), что является малоинформативным.
Данный шаблон для модели используется на административном сайте по умолчанию, однако это можно изменить – объявить для нее класс-редактор. Объявляется редактор в модуле admin.py пакета приложения. Изменим текущий код:
from django.contrib import admin from .models import Bb class Bbadmin(admin.ModelAdmin): list_display = ('title', 'content', 'price', 'published') list_display_links = ('title', 'content') search_fields = ('title', 'content', ) admin.site.register(Bb, BbAdmin)
При объявлении класса редактора он указывается как производный от класса ModelAdmin (модуль django.contrib.admin). Набор атрибутов класса и задает основные параметры представления модели. В нашем случае использовались следующие атрибуты:
- list_display – набор полей, которые будут отображаться при выводе списка записей;
- list_display_links – определяет набор полей, которые необходимо преобразовать в активные ссылки, ведущие на страницу редактирования записи;
- search_fields – формирует набор полей, по которые будет доступна фильтрация.
В нашем примере в списке будут отображаться следующие поля: название, описание товара, цена и дата публикации. Два первых поля преобразуются в гиперссылки для доступа к форме редактирования. Фильтрация возможна также по этим двум полям.
Сохраним файл и обновим страницу для проверки внесенных изменений:
Кроме прочего, появилась возможность применять фильтры по полям, указанных в search_fields – достаточно воспользоваться поисковой формой в верхней части страницы.