Список ограничений БД: 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'
),
]