Ответ
Django Admin Inline — это функциональность в административной панели Django, которая позволяет редактировать связанные модели непосредственно на странице редактирования родительской модели. Это значительно упрощает управление данными и повышает удобство работы с объектами, связанными отношениями OneToOne, ForeignKey и ManyToMany.
Основные классы для Inline:
admin.TabularInline: Отображает связанные объекты в табличном виде, что идеально подходит для компактного представления множества однотипных записей.admin.StackedInline: Отображает каждый связанный объект в виде "стека" полей, аналогично стандартной форме редактирования модели, что удобно для объектов с большим количеством полей.
Пример использования:
Предположим, у нас есть модели Author и Book, где Book имеет ForeignKey на Author.
# models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
publication_date = models.DateField()
def __str__(self):
return self.title
# admin.py
from django.contrib import admin
from .models import Author, Book
# Определяем Inline для модели Book
class BookInline(admin.TabularInline):
model = Book # Указываем связанную модель
extra = 1 # Количество пустых форм для добавления новых связанных объектов
fields = ['title', 'publication_date'] # Какие поля показывать в inline
# Регистрируем модель Author в админке и добавляем BookInline
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
inlines = [BookInline] # Добавляем BookInline к админке автора
list_display = ['name']
Ключевые параметры Inline классов:
model: Обязательный параметр, указывающий связанную модель.extra: Количество дополнительных пустых форм, отображаемых для добавления новых связанных объектов.max_num: Максимальное количество связанных объектов, которые можно редактировать или добавлять.fields: Кортеж или список полей, которые будут отображаться в inline-форме.readonly_fields: Кортеж или список полей, которые будут отображаться только для чтения.fk_name: Используется для явного указания имени внешнего ключа, если у родительской модели несколько внешних ключей на дочернюю, или для OneToOneField, который не является первичным ключом.