🔖 Справочник: Admin, Meta, ModelAdmin

⚡ Шпаргалка

  • python manage.py createsuperuser — создать суперпользователя
  • @admin.register(Model) — зарегистрировать модель (современный стиль)
  • list_display = ('f1', 'f2') — колонки в списке Admin
  • search_fields = ('title',) — поля для поиска
  • list_filter = ('status',) — боковые фильтры
  • ordering = ['-created_at'] в Meta — сортировка по умолчанию
  • verbose_name = 'задача' — имя модели в Admin

Команды manage.py

КомандаОписание
python manage.py createsuperuser Создать суперпользователя для Admin
python manage.py makemigrations Создать файлы миграций после изменения models.py
python manage.py migrate Применить миграции к базе данных
python manage.py runserver Запустить сервер разработки (Admin: /admin/)
python manage.py shell Интерактивная Django shell для тестирования моделей

Атрибуты класса Meta

АтрибутТип значенияОписание
db_table str Имя таблицы в БД. По умолчанию: <app>_<model>
ordering list[str] Сортировка по умолчанию. '-field' — по убыванию
verbose_name str Человекочитаемое имя (ед. число). Используется в Admin
verbose_name_plural str Человекочитаемое имя (мн. число). Используется в Admin
get_latest_by str Поле для метода .latest() / .earliest()
default_related_name str Имя обратной связи для ForeignKey. Заменяет book_set на указанное
unique_together tuple Устарело Уникальность комбинации полей. Используйте constraints
indexes list Список models.Index() для таблицы
constraints list Список ограничений БД: UniqueConstraint, CheckConstraint

Атрибуты ModelAdmin

АтрибутТипОписание
list_display tuple/list Поля (колонки), отображаемые в списке объектов модели
search_fields tuple/list Поля для полнотекстового поиска. Для FK: 'field__subfield'
list_filter tuple/list Поля для боковой панели фильтрации
ordering tuple/list Порядок сортировки в Admin. Переопределяет Meta.ordering
fields tuple/list Поля и их порядок в форме редактирования объекта
fieldsets list[tuple] Группировка полей в форме редактирования по секциям
list_per_page int Количество объектов на одной странице (по умолчанию 100)
readonly_fields tuple/list Поля только для чтения в форме редактирования
list_editable tuple/list Поля, редактируемые прямо в списке объектов
date_hierarchy str Поле DateField/DateTimeField для навигации по датам

Синтаксис регистрации моделей

# Способ 1: admin.site.register
from django.contrib import admin
from .models import Book

admin.site.register(Book)                      # Без настроек
admin.site.register(Book, BookAdmin)           # С классом настроек

# Способ 2: декоратор @admin.register (рекомендуется)
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'published_date')
    ...

# Несколько моделей одним декоратором
@admin.register(Book, Author)
class LibraryAdmin(admin.ModelAdmin):
    ...

Синтаксис indexes и constraints

from django.db import models
from django.db.models import UniqueConstraint, CheckConstraint, Q

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    published_date = models.DateField()
    price = models.DecimalField(max_digits=8, decimal_places=2)

    class Meta:
        indexes = [
            models.Index(fields=['title', 'author']),           # составной индекс
            models.Index(fields=['published_date'],
                         name='published_idx'),                  # именованный индекс
        ]
        constraints = [
            UniqueConstraint(
                fields=['title', 'author'],
                name='unique_title_author'
            ),
            CheckConstraint(
                check=Q(price__gte=0),
                name='price_non_negative'
            ),
        ]