django nested inlines
- Define models:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
class Page(models.Model):
content = models.TextField()
book = models.ForeignKey(Book, on_delete=models.CASCADE)
- Create inline admin classes:
from django.contrib import admin
class PageInline(admin.StackedInline):
model = Page
class BookInline(admin.TabularInline):
model = Book
inlines = [PageInline]
class AuthorAdmin(admin.ModelAdmin):
inlines = [BookInline]
class BookAdmin(admin.ModelAdmin):
inlines = [PageInline]
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book, BookAdmin)
admin.site.register(Page)
- Register models with admin:
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book, BookAdmin)
admin.site.register(Page)
Now, when you access the Author, Book, or Page models in the Django admin, you'll see nested inlines for Books within Authors and Pages within Books.