Skip to content

Auto Admin

Auto-generate Django Admin configuration from your ModelSerializer field definitions — zero extra boilerplate.


Quick Start

Option 1: @register_admin decorator

Python
from ninja_aio.admin import register_admin
from ninja_aio.models import ModelSerializer

@register_admin
class Book(ModelSerializer):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    published = models.DateField()
    synopsis = models.TextField(blank=True)

    class ReadSerializer:
        fields = ["id", "title", "author", "published", "synopsis"]

    class UpdateSerializer:
        fields = ["title", "synopsis"]

This auto-generates:

Admin attribute Generated value
list_display ("id", "title", "author", "published", "synopsis")
search_fields ("title", "synopsis")
list_filter ("author", "published")
readonly_fields ("author", "published")

Option 2: Model.as_admin()

Python
# admin.py
from django.contrib import admin
from myapp.models import Book

admin.site.register(Book, Book.as_admin())

Customization

Both approaches accept keyword overrides:

Python
# Via decorator
@register_admin(list_per_page=50, ordering=["-published"])
class Book(ModelSerializer): ...

# Via as_admin()
admin.site.register(Book, Book.as_admin(list_per_page=50))

Override any auto-generated attribute:

Python
@register_admin(
    list_display=("title", "author"),  # Override auto list_display
    search_fields=("title", "author__name"),  # Add relation search
)
class Book(ModelSerializer): ...

Custom Admin Site

Python
from django.contrib.admin import AdminSite

custom_site = AdminSite(name="custom")

@register_admin(site=custom_site)
class Book(ModelSerializer): ...

# or
custom_site.register(Book, Book.as_admin())

Field Classification Rules

Django Field Type list_display search_fields list_filter readonly_fields
CharField, TextField, SlugField, EmailField Yes Yes If not in UpdateSerializer
IntegerField, FloatField, DecimalField Yes If not in UpdateSerializer
BooleanField Yes Yes If not in UpdateSerializer
DateField, DateTimeField Yes Yes If not in UpdateSerializer
ForeignKey, OneToOneField Yes Yes If not in UpdateSerializer
ManyToManyField Yes
Field with choices Yes Yes If not in UpdateSerializer
Custom/computed field Yes Always

API Reference

register_admin(model=None, *, site=None, **overrides)

Decorator to auto-register a ModelSerializer in Django Admin.

Parameters:

Parameter Type Default Description
site AdminSite admin.site Admin site to register on
**overrides Any Override any ModelAdmin attribute

model_admin_factory(model, **overrides) -> type[ModelAdmin]

Create a ModelAdmin class without registering it.

Python
from ninja_aio.admin import model_admin_factory

BookAdmin = model_admin_factory(Book, list_per_page=25)
admin.site.register(Book, BookAdmin)

ModelSerializer.as_admin(**overrides) -> type[ModelAdmin]

Classmethod on any ModelSerializer subclass. Equivalent to model_admin_factory(cls, **overrides).