Атрибут extra
Атрибут extra применяется к классам StackedInline
в административной панели Django для управления количеством
пустых форм, которые отображаются для добавления новых
связанных записей. Этот атрибут позволяет настроить интерфейс
так, чтобы пользователю было удобно добавлять сразу несколько
связанных объектов без необходимости нажимать кнопку
"Добавить еще" для каждой новой записи. Атрибут принимает
целочисленное значение, которое определяет количество
отображаемых пустых форм.
Синтаксис
class InlineClassName(StackedInline):
model = RelatedModel
extra = number
Пример
Рассмотрим базовый пример использования атрибута extra
в классе StackedInline для модели 'Article',
у которой есть связанная модель 'Comment':
from django.contrib import admin
from .models import Article, Comment
class CommentInline(admin.StackedInline):
model = Comment
extra = 3
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
inlines = [CommentInline]
В этом примере при редактировании статьи в административной панели будут отображаться три пустые формы для добавления новых комментариев. Пользователь может заполнить все три формы и сохранить статью, тогда все три комментария будут созданы одновременно.
Пример
Если установить значение 0 для атрибута extra,
то пустые формы для добавления не будут отображаться.
Пользователь сможет добавить новые связанные записи только
через кнопку "Добавить еще":
from django.contrib import admin
from .models import Category, Product
class ProductInline(admin.StackedInline):
model = Product
extra = 0
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
inlines = [ProductInline]
При таком подходе в интерфейсе административной панели изначально не будет пустых форм для добавления продуктов. Пользователь должен будет нажать кнопку "Добавить еще", чтобы отобразить форму для нового продукта.
Пример
Атрибут extra можно использовать вместе с атрибутом
max_num, который ограничивает максимальное количество
форм для добавления новых записей. Например, если мы хотим
показывать две пустые формы, но не более пяти всего:
from django.contrib import admin
from .models import Author, Book
class BookInline(admin.StackedInline):
model = Book
extra = 2
max_num = 5
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
inlines = [BookInline]
В этом примере будут отображаться две пустые формы для добавления книг. Если пользователь добавит новые книги, общее количество форм не превысит пяти. При достижении максимального значения кнопка "Добавить еще" становится неактивной.
Пример
Атрибут extra может принимать отрицательные значения,
однако это не рекомендуется. Отрицательное значение будет
интерпретироваться как 0. Рассмотрим пример с
отрицательным значением:
from django.contrib import admin
from .models import Post, Tag
class TagInline(admin.StackedInline):
model = Tag
extra = -1
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
inlines = [TagInline]
В этом случае, несмотря на указанное отрицательное значение
-1, интерпретатор Django воспримет его как 0,
поэтому пустые формы для добавления тегов отображаться
не будут. Рекомендуется использовать только неотрицательные
значения для атрибута extra.
Смотрите также
-
класс
StackedInline,
который используется для создания вертикальных inline-форм в административной панели -
атрибут
model,
который указывает модель для inline-форм -
атрибут
fk_name,
который указывает имя внешнего ключа для связи с родительской моделью -
класс
TabularInline,
который создает горизонтальные inline-формы в административной панели