Native form
A plain Django form — no widget attrs, no crispy
This page renders {{ form }} — nothing else. The Bootstrap 5 markup
(labels, selects, checkbox, validation states, help text) comes entirely from
FORM_RENDERER = "django_adminlte4.forms.AdminLTEFormRenderer" in settings.
Submit it empty to see the is-invalid / invalid-feedback states.
How it works
The renderer swaps Django's form/field templates for AdminLTE-themed ones, project-wide:
# settings.py
FORM_RENDERER = "django_adminlte4.forms.AdminLTEFormRenderer"
Every {{ form }} in the project — function-based views, generic CBVs,
UserCreationForm — renders themed automatically. Prefer fine-grained layout
control? The Contacts CRUD shows the
crispy-forms integration instead; both ship with the package.