Skip to main content

Overview

Unfold provides enhanced inline admin classes with pagination support and additional customization options.

Base Mixin

BaseInlineMixin

class BaseInlineMixin
Located in unfold/admin.py:237 Base mixin providing common functionality for all Unfold inline classes.

Attributes

formfield_overrides
dict
default:"FORMFIELD_OVERRIDES_INLINE"
Dictionary of field type to widget mappings for form field overrides.
readonly_preprocess_fields
dict[str, Callable | str]
default:"{}"
Dictionary mapping field names to preprocessing functions for readonly fields.
ordering_field
str | None
default:"None"
Field name to use for custom ordering functionality.
per_page
int | None
default:"None"
Number of inline forms to display per page. Enables pagination when set.
hide_ordering_field
bool
default:"False"
Whether to hide the ordering field from display.
collapsible
bool
default:"False"
Whether the inline should be collapsible.

Inline Classes

TabularInline

from unfold.admin import TabularInline

class TabularInline(
    BaseInlineMixin,
    BaseModelAdminMixin,
    BaseTabularInline
)
Located in unfold/admin.py:246 Tabular inline with Unfold styling and pagination support.

Attributes

formset
Type
default:"PaginationInlineFormSet"
The formset class used for this inline.

Usage Example

from django.contrib import admin
from unfold.admin import ModelAdmin, TabularInline
from .models import Book, Chapter

class ChapterInline(TabularInline):
    model = Chapter
    extra = 1
    per_page = 10  # Enable pagination
    ordering_field = "order"
    fields = ["title", "page_count", "order"]

@admin.register(Book)
class BookAdmin(ModelAdmin):
    inlines = [ChapterInline]

StackedInline

from unfold.admin import StackedInline

class StackedInline(
    BaseInlineMixin,
    BaseModelAdminMixin,
    BaseStackedInline
)
Located in unfold/admin.py:250 Stacked inline with Unfold styling and pagination support.

Attributes

formset
Type
default:"PaginationInlineFormSet"
The formset class used for this inline.

Usage Example

from django.contrib import admin
from unfold.admin import ModelAdmin, StackedInline
from .models import Author, Biography

class BiographyInline(StackedInline):
    model = Biography
    extra = 0
    collapsible = True
    fields = ["birth_date", "birth_place", "bio"]

@admin.register(Author)
class AuthorAdmin(ModelAdmin):
    inlines = [BiographyInline]

GenericStackedInline

from unfold.admin import GenericStackedInline

class GenericStackedInline(
    BaseInlineMixin,
    BaseModelAdminMixin,
    BaseGenericStackedInline
)
Located in unfold/admin.py:254 Generic stacked inline for use with generic foreign keys.

Attributes

formset
Type
default:"PaginationGenericInlineFormSet"
The formset class used for this inline.

Usage Example

from django.contrib import admin
from django.contrib.contenttypes.models import ContentType
from unfold.admin import ModelAdmin, GenericStackedInline
from .models import Article, Comment

class CommentInline(GenericStackedInline):
    model = Comment
    ct_field = "content_type"
    ct_fk_field = "object_id"
    extra = 1
    per_page = 5

@admin.register(Article)
class ArticleAdmin(ModelAdmin):
    inlines = [CommentInline]

GenericTabularInline

from unfold.admin import GenericTabularInline

class GenericTabularInline(
    BaseInlineMixin,
    BaseModelAdminMixin,
    BaseGenericTabularInline
)
Located in unfold/admin.py:260 Generic tabular inline for use with generic foreign keys.

Attributes

formset
Type
default:"PaginationGenericInlineFormSet"
The formset class used for this inline.

Usage Example

from django.contrib import admin
from unfold.admin import ModelAdmin, GenericTabularInline
from .models import Product, Tag

class TagInline(GenericTabularInline):
    model = Tag
    ct_field = "content_type"
    ct_fk_field = "object_id"
    extra = 1
    fields = ["name", "color"]

@admin.register(Product)
class ProductAdmin(ModelAdmin):
    inlines = [TagInline]

Pagination Support

All inline classes support pagination through the per_page attribute:
class MyInline(TabularInline):
    model = MyModel
    per_page = 10  # Show 10 items per page
When per_page is set, the inline will:
  • Display a pagination interface
  • Only load the specified number of forms at once
  • Improve performance for inlines with many related objects

Ordering Support

Use the ordering_field attribute to enable drag-and-drop ordering:
class MyInline(TabularInline):
    model = MyModel
    ordering_field = "order"  # Field that stores the order
    hide_ordering_field = True  # Hide the order field from display

Readonly Field Preprocessing

Preprocess readonly fields before display:
def format_date(value):
    return value.strftime("%B %d, %Y")

class MyInline(TabularInline):
    model = MyModel
    readonly_fields = ["created_at"]
    readonly_preprocess_fields = {
        "created_at": format_date,
    }

Build docs developers (and LLMs) love