Языки программирования

Параметры полей и моделей

Для того, чтобы наша административная панель Django выглядела более понятна для обычного пользователя необходимо указать правильные названия полей.

Наша созданная модель представляется непонятной аббревиатурой «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», а в нём — атрибуты класса, которые зададут параметры уже самой модели:

  • 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» пакета приложения. Откроем его и заменим имеющийся в нем код:
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. Он содержит набор атрибутов класса, которые и задают параметры представления модели. Мы используем следующие атрибуты класса:

  • list_display — последовательность имен полей, которые должны выводиться в списке записей;
  • list_display_links — последовательность имен полей, которые должны быть преобразованы в гиперссылки, ведущие на страницу правки записей;
  • search_fields — последовательность имен полей, по которым должна выполняться фильтрация.

Запустим отладочный web-сервер или обновим страницу в браузере если он уже запущен и перейдем на страницу списка записей модели Bb:
Все объявления удачно отобразились и поиск по объявлениям работает.
Фреймворк Django