Для того, чтобы наша административная панель Django выглядела более понятна для обычного пользователя необходимо указать правильные названия полей.
Наша созданная модель представляется непонятной аббревиатурой «Bbs», а не простым и ясным текстом «Объявления». Откроем модуль «models.py» пакета приложения «btest». В написанный код необходимо ввести несколько поправок:
Наша созданная модель представляется непонятной аббревиатурой «Bbs», а не простым и ясным текстом «Объявления». Откроем модуль «models.py» пакета приложения «btest». В написанный код необходимо ввести несколько поправок:
from django.db import models
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='Цена')
published = models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='Опубликовано')
class Meta:
verbose_name_plural = 'Объявления'
verbose_name = 'Объявление'
ordering = ['-published']
В вызове каждого конструктора класса поля мы добавили именованный параметр verbose_name. Он указывает «человеческое» название поля, которое будет выводится на экран.
Далее, в классе модели мы объявили вложенный класс «Meta», а в нём — атрибуты класса, которые зададут параметры уже самой модели:
После исправления кода сохраните его. Теперь можно исправить код контроллера index(). Он объявлен в модуле views.py пакета приложения, убрав из выражения, извлекающего список записей, указание сортировки:
Далее, в классе модели мы объявили вложенный класс «Meta», а в нём — атрибуты класса, которые зададут параметры уже самой модели:
- verbose_name_plural — название модели во множественном числе;
- verbose_name — название модели в единственном числе;
- ordering — последовательность полей, по которым по умолчанию будет выполняться сортировка записей.
После исправления кода сохраните его. Теперь можно исправить код контроллера index(). Он объявлен в модуле views.py пакета приложения, убрав из выражения, извлекающего список записей, указание сортировки:
from .models import Bb
from django.shortcuts import render
def index(request):
bbs = Bb.objects.all()
return render(request, "btest/index.html", {'bbs': bbs})
Сохраним код и запустим отладочный web-сервер. Зайдем по ссылке «http://localhost:8000/admin» и проверим наши исправления:
Все получилось, но на странице списка записей все позиции представляются строками вида «имя класса модели object значение ключа», из которых невозможно понять, что же хранится в каждой из этих записей.
Данную проблему можно исправить в модуле административных настроек «admin.py» пакета приложения. Откроем его и заменим имеющийся в нем код:
Данную проблему можно исправить в модуле административных настроек «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', 'price', 'published')
admin.site.register(Bb, BbAdmin)
Редактор BbAdmin объявляется как подкласс класса ModelAdmin из модуля django.contrib.admin. Он содержит набор атрибутов класса, которые и задают параметры представления модели. Мы используем следующие атрибуты класса:
Запустим отладочный web-сервер или обновим страницу в браузере если он уже запущен и перейдем на страницу списка записей модели Bb:
- list_display — последовательность имен полей, которые должны выводиться в списке записей;
- list_display_links — последовательность имен полей, которые должны быть преобразованы в гиперссылки, ведущие на страницу правки записей;
- search_fields — последовательность имен полей, по которым должна выполняться фильтрация.
Запустим отладочный web-сервер или обновим страницу в браузере если он уже запущен и перейдем на страницу списка записей модели Bb:
Все объявления удачно отобразились и поиск по объявлениям работает.