Inline models let you edit related data together in one place. This makes managing connected information easier and faster.
When you want to edit a main item and its related items on the same page in the admin panel.
When you have a parent-child relationship between models and want to add or change children while editing the parent.
When you want to keep related data organized and avoid switching between different pages.
When you want to simplify data entry for related records in the Django admin.
When you want to show related objects directly inside the main object's admin form.
Syntax
Django
from django.contrib import admin
from .models import ParentModel, ChildModel
class ChildModelInline(admin.TabularInline):
model = ChildModel
extra = 1
@admin.register(ParentModel)
class ParentModelAdmin(admin.ModelAdmin):
inlines = [ChildModelInline]
TabularInline shows related items in a table format.
You can also use StackedInline for a stacked layout.
Examples
This shows two extra blank forms for adding new related items.
Django
class ChildModelInline(admin.TabularInline):
model = ChildModel
extra = 2
This uses a stacked layout and shows no extra blank forms.
Django
class ChildModelInline(admin.StackedInline):
model = ChildModel
extra = 0
This registers the parent model with the inline child model in the admin.
Django
@admin.register(ParentModel)
class ParentModelAdmin(admin.ModelAdmin):
inlines = [ChildModelInline]
Sample Program
This example lets you add and edit books directly inside the author admin page. You see a table of books under each author and can add new books easily.
Django
from django.db import models
from django.contrib import admin
class Author(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
def __str__(self):
return self.title
class BookInline(admin.TabularInline):
model = Book
extra = 1
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
inlines = [BookInline]
OutputSuccess
Important Notes
Remember to register your models in admin to see the inline effect.
Use extra to control how many blank forms appear for new related items.
Inline models only work in Django admin, not in regular views.
Summary
Inline models let you edit related data together in Django admin.
Use TabularInline or StackedInline to show related items.
They make managing connected records faster and simpler.
Practice
(1/5)
1. What is the main purpose of using inline models in Django admin?
easy
A. To edit related models together on the same admin page
B. To create new database tables automatically
C. To improve website loading speed
D. To add custom CSS styles to admin pages
Solution
Step 1: Understand inline models concept
Inline models allow editing related data on the same admin page, making management easier.
Step 2: Identify the main purpose
The main goal is to edit related models together, not to create tables or change styles.
Final Answer:
To edit related models together on the same admin page -> Option A
Quick Check:
Inline models = edit related data together [OK]
Hint: Inline means editing related data on one page [OK]
Common Mistakes:
Thinking inline models create new tables
Confusing inline models with styling options
Assuming inline models improve site speed
2. Which Django admin class is used to display related models in a table format inline?
easy
A. StackedInline
B. InlineModelAdmin
C. TabularInline
D. RelatedInline
Solution
Step 1: Recall inline classes in Django admin
Django provides two main inline classes: TabularInline and StackedInline.
Step 2: Match class to table format
TabularInline shows related models in a compact table, while StackedInline shows stacked blocks.
Final Answer:
TabularInline -> Option C
Quick Check:
Table format inline = TabularInline [OK]
Hint: Tabular means table layout, Stacked means block layout [OK]
Common Mistakes:
Choosing StackedInline for table layout
Using non-existent classes like InlineModelAdmin
Confusing RelatedInline with official classes
3. Given this Django admin code snippet, what will be the result when editing a Book in admin?
class ChapterInline(admin.TabularInline):
model = Chapter
class BookAdmin(admin.ModelAdmin):
inlines = [ChapterInline]
admin.site.register(Book, BookAdmin)
medium
A. Chapters will not appear in the Book admin page
B. Books will be listed in a table inside Chapter admin
C. An error will occur because inlines must be StackedInline
D. Chapters related to the Book will be editable inline in a table format
Solution
Step 1: Understand the inline setup
The ChapterInline uses TabularInline with model Chapter, linked to BookAdmin inlines.
Step 2: Predict admin behavior
When editing a Book, its related Chapters appear inline in a table for editing.
Final Answer:
Chapters related to the Book will be editable inline in a table format -> Option D
Quick Check:
TabularInline in BookAdmin = Chapters editable inline [OK]
Hint: Inlines in ModelAdmin show related models on that model's page [OK]
Common Mistakes:
Thinking Chapters appear inside Chapter admin
Assuming no inline display without StackedInline
Confusing which model is inline of which
4. Identify the error in this Django admin inline setup:
class AuthorInline(admin.TabularInline):
model = Author
class BookAdmin(admin.ModelAdmin):
inlines = [AuthorInline]
admin.site.register(Book, BookAdmin)
medium
A. Author model cannot be inline of Book because no ForeignKey to Book exists
B. TabularInline must be replaced with StackedInline
C. The inlines list must be a tuple, not a list
D. admin.site.register should register Author, not Book
Solution
Step 1: Check model relationships
For inline to work, the inline model (Author) must have a ForeignKey to the parent model (Book).
Step 2: Identify missing ForeignKey
Author likely does not have a ForeignKey to Book, so it cannot be inline in BookAdmin.
Final Answer:
Author model cannot be inline of Book because no ForeignKey to Book exists -> Option A
Quick Check:
Inline model needs ForeignKey to parent [OK]
Hint: Inline model must have ForeignKey to parent model [OK]
Common Mistakes:
Thinking TabularInline vs StackedInline causes error
Believing inlines must be tuples, not lists
Registering wrong model in admin.site.register
5. You want to allow editing multiple related Comment objects inside a Post admin page. Comments have a ForeignKey to Post. Which is the best way to set this up for easy editing and better user experience?
hard
A. Register Comment model separately without inlines
B. Create a CommentInline class using TabularInline and add it to PostAdmin inlines
C. Use StackedInline for CommentInline but do not add it to PostAdmin
D. Add a ForeignKey from Post to Comment and use TabularInline in CommentAdmin
Solution
Step 1: Use ForeignKey direction correctly
Comments have ForeignKey to Post, so Comment can be inline in PostAdmin.
Step 2: Choose inline class and add to PostAdmin
TabularInline is good for multiple related objects; adding CommentInline to PostAdmin inlines enables editing comments inside Post.
Final Answer:
Create a CommentInline class using TabularInline and add it to PostAdmin inlines -> Option B
Quick Check:
ForeignKey from Comment to Post + TabularInline in PostAdmin = best UX [OK]
Hint: Inline related model with ForeignKey to parent for easy editing [OK]
Common Mistakes:
Not adding inline to parent admin class
Using wrong ForeignKey direction
Registering models separately without inlines
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.