Атрибут model класса StackedInline
Атрибут model класса StackedInline указывает, какая модель будет использоваться для отображения связанных записей на странице редактирования родительской модели в административной панели Django. Этот атрибут является обязательным и должен быть установлен в подклассе StackedInline. Он определяет, записи какой модели будут отображаться в виде вертикального стека полей внутри формы редактирования основной модели.
Синтаксис
from django.contrib import admin
from .models import ParentModel, ChildModel
class ChildModelInline(admin.StackedInline):
model = ChildModel
Пример
Рассмотрим пример использования атрибута model в классе StackedInline для связи моделей Category и Article. Для начала определим модели:
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=200)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
published = models.BooleanField(default=False)
def __str__(self):
return self.title
Теперь создадим класс StackedInline с указанием атрибута model для модели Article, чтобы можно было редактировать статьи прямо на странице категории:
from django.contrib import admin
from .models import Category, Article
class ArticleInline(admin.StackedInline):
model = Article
extra = 1
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
inlines = [ArticleInline]
После регистрации администратора для модели Category на странице редактирования категории появится вложенная форма для добавления и изменения статей. Все поля модели Article будут отображаться в виде вертикального стека, что удобно для форм с большим количеством полей.
Пример
В этом примере настроим отображение только определенных полей модели в инлайн-форме, используя атрибут fields вместе с model:
from django.contrib import admin
from .models import Author, Book
class BookInline(admin.StackedInline):
model = Book
fields = ('title', 'year', 'is_published')
extra = 2
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
inlines = [BookInline]
Здесь мы ограничили отображение полей модели Book только тремя полями: title, year и is_published. Атрибут extra задает количество дополнительных пустых форм для добавления новых записей. На странице редактирования автора будут отображаться книги, связанные с ним, и поля будут расположены в виде вертикального стека.
Смотрите также
-
класс
TabularInline,
который отображает связанные записи в табличной форме -
атрибут
modelклассаTabularInline,
который также определяет модель для инлайн-отображения -
атрибут
extra,
который задает количество дополнительных пустых форм -
атрибут
inlinesклассаModelAdmin,
который подключает инлайн-классы к админке