← К оглавлению урока
⚡ Быстрая шпаргалка
# 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) |
Массовое обновление заданных полей за один запрос |