← К оглавлению урока

🔖 Справочник: Инлайн-формы и Admin Actions

⚡ Быстрая шпаргалка

# Tabular inline
class MyInline(admin.TabularInline):
    model = RelatedModel
    extra = 1

# Stacked inline
class MyInline(admin.StackedInline):
    model = RelatedModel
    extra = 1

# Подключение к Admin
class ParentAdmin(admin.ModelAdmin):
    inlines = [MyInline]

# Action
def my_action(self, request, queryset):
    queryset.update(field=value)
my_action.short_description = "Описание"

class MyAdmin(admin.ModelAdmin):
    actions = [my_action]

Классы Inline

КлассФорматКогда использовать
admin.TabularInline Таблица (строки) Мало полей, нужна компактность, сравнение объектов
admin.StackedInline Блоки (вертикально) Много полей, важна читаемость каждого объекта

Атрибуты Inline-класса

АтрибутТипПо умолчаниюОписание
model Model class Обязателен Связанная модель (должна иметь ForeignKey на родительскую)
extra int 3 Количество пустых форм для новых объектов
max_num int None Максимальное число связанных объектов (None — без ограничений)
min_num int None Минимальное число связанных объектов
fields list/tuple Все поля Явно указать, какие поля показывать
exclude list/tuple [] Поля, которые нужно скрыть
readonly_fields list/tuple [] Поля только для чтения
can_delete bool True Показывать чекбокс «Удалить»
show_change_link bool False Показывать ссылку на отдельную страницу редактирования
fk_name str None Имя ForeignKey, если их несколько
ordering list/tuple None Порядок сортировки связанных объектов
verbose_name str из модели Человекочитаемое название
verbose_name_plural str из модели Человекочитаемое название (множ.ч.)

Атрибуты ModelAdmin (связанные с Inline)

АтрибутОписание
inlines = [InlineClass, ...] Список Inline-классов для отображения на странице редактирования
actions = [my_action, ...] Список пользовательских действий

Admin Actions — структура

def action_name(self, request, queryset):
    """
    self    — объект ModelAdmin
    request — HttpRequest
    queryset — QuerySet выбранных объектов
    """
    queryset.update(field=value)

action_name.short_description = "Текст в выпадающем списке"

class MyAdmin(admin.ModelAdmin):
    actions = [action_name]

Команды manage.py (после изменения моделей)

КомандаЧто делает
python manage.py makemigrations Создать файл миграции по изменениям моделей
python manage.py migrate Применить миграции к базе данных
python manage.py runserver Запустить dev-сервер
python manage.py createsuperuser Создать администратора для доступа в Admin

Массовые ORM-операции в Actions

МетодОписание
queryset.update(**kwargs) Массовое обновление — один SQL UPDATE, не вызывает save()
queryset.delete() Массовое удаление — один SQL DELETE
Model.objects.bulk_create(list) Создание множества объектов за один SQL INSERT
Model.objects.bulk_update(list, fields) Массовое обновление заданных полей за один запрос