Что такое Django Admin Inline?

Ответ

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, который не является первичным ключом.