Overview
Unfold provides a comprehensive set of form widgets with consistent styling and enhanced functionality.
Text Input Widgets
UnfoldAdminTextInputWidget
from unfold.widgets import UnfoldAdminTextInputWidget
UnfoldAdminTextInputWidget(attrs: dict[str, Any] | None = None)
Standard text input with Unfold styling. Supports prefix/suffix icons and text.
HTML attributes for the input. Supports special keys:
prefix: Text to display before the input
prefix_icon: Material icon name to display before the input
suffix: Text to display after the input
suffix_icon: Material icon name to display after the input
# Example usage
widget=UnfoldAdminTextInputWidget(attrs={
"prefix_icon": "search",
"placeholder": "Search..."
})
from unfold.widgets import UnfoldAdminURLInputWidget
UnfoldAdminURLInputWidget(attrs: dict[str, Any] | None = None)
URL input field with validation and link preview.
from unfold.widgets import UnfoldAdminEmailInputWidget
UnfoldAdminEmailInputWidget(attrs: dict[str, Any] | None = None)
Email input field with validation.
from unfold.widgets import UnfoldAdminPasswordWidget
UnfoldAdminPasswordWidget(
attrs: dict[str, Any] | None = None,
render_value: bool = False
)
Password input field.
from unfold.widgets import UnfoldAdminPasswordToggleWidget
Password input with visibility toggle button.
from unfold.widgets import UnfoldAdminUUIDInputWidget
UnfoldAdminUUIDInputWidget(attrs: dict[str, Any] | None = None)
UUID input field with validation.
from unfold.widgets import UnfoldAdminColorInputWidget
UnfoldAdminColorInputWidget(attrs: dict[str, Any] | None = None)
Color picker input.
from unfold.widgets import UnfoldAdminIntegerFieldWidget
UnfoldAdminIntegerFieldWidget(attrs: dict[str, Any] | None = None)
Integer input with validation.
from unfold.widgets import UnfoldAdminBigIntegerFieldWidget
UnfoldAdminBigIntegerFieldWidget(attrs: dict[str, Any] | None = None)
Big integer input with validation.
from unfold.widgets import UnfoldAdminDecimalFieldWidget
UnfoldAdminDecimalFieldWidget(attrs: dict[str, Any] | None = None)
Decimal number input.
from unfold.widgets import UnfoldAdminIntegerRangeWidget
UnfoldAdminIntegerRangeWidget(attrs: dict[str, Any] | None = None)
Widget for integer range fields (PostgreSQL IntegerRangeField).
Textarea Widgets
UnfoldAdminTextareaWidget
from unfold.widgets import UnfoldAdminTextareaWidget
UnfoldAdminTextareaWidget(attrs: dict[str, Any] | None = None)
Multi-line text input.
UnfoldAdminExpandableTextareaWidget
from unfold.widgets import UnfoldAdminExpandableTextareaWidget
UnfoldAdminExpandableTextareaWidget(attrs: dict[str, Any] | None = None)
Textarea that automatically expands based on content.
from unfold.widgets import UnfoldAdminDateWidget
UnfoldAdminDateWidget(
attrs: dict[str, Any] | None = None,
format: str | None = None
)
Date picker widget with calendar.
from unfold.widgets import UnfoldAdminTimeWidget
UnfoldAdminTimeWidget(
attrs: dict[str, Any] | None = None,
format: str | None = None
)
Time picker widget.
from unfold.widgets import UnfoldAdminSplitDateTimeWidget
UnfoldAdminSplitDateTimeWidget(attrs: dict[str, Any] | None = None)
Split date and time inputs displayed horizontally.
from unfold.widgets import UnfoldAdminSplitDateTimeVerticalWidget
UnfoldAdminSplitDateTimeVerticalWidget(
attrs: dict[str, Any] | None = None,
date_attrs: dict[str, Any] | None = None,
time_attrs: dict[str, Any] | None = None,
date_label: str | None = None,
time_label: str | None = None
)
Split date and time inputs displayed vertically with labels.
from unfold.widgets import UnfoldAdminSelectWidget
UnfoldAdminSelectWidget(
attrs: dict[str, Any] | None = None,
choices: tuple | list = ()
)
Standard select dropdown.
from unfold.widgets import UnfoldAdminSelectMultipleWidget
UnfoldAdminSelectMultipleWidget(
attrs: dict[str, Any] | None = None,
choices: tuple | list = ()
)
Multiple selection dropdown.
from unfold.widgets import UnfoldAdminNullBooleanSelectWidget
UnfoldAdminNullBooleanSelectWidget(attrs: dict[str, Any] | None = None)
Select widget for nullable boolean fields (True/False/Unknown).
from unfold.widgets import UnfoldAdminSelect2Widget
UnfoldAdminSelect2Widget(
attrs: dict[str, Any] | None = None,
choices: tuple | list = ()
)
Select2-enhanced dropdown with search.
from unfold.widgets import UnfoldAdminSelect2MultipleWidget
UnfoldAdminSelect2MultipleWidget(
attrs: dict[str, Any] | None = None,
choices: tuple | list = ()
)
Select2-enhanced multiple selection dropdown.
from unfold.widgets import UnfoldAdminAutocompleteWidget
UnfoldAdminAutocompleteWidget(
attrs: dict[str, Any] | None = None,
choices: tuple | list = ()
)
Ajax-powered autocomplete widget.
from unfold.widgets import UnfoldAdminMultipleAutocompleteWidget
UnfoldAdminMultipleAutocompleteWidget(
attrs: dict[str, Any] | None = None,
choices: tuple | list = ()
)
Ajax-powered multiple selection autocomplete.
from unfold.widgets import UnfoldAdminAutocompleteModelChoiceFieldWidget
Autocomplete for model choice fields.
from unfold.widgets import UnfoldAdminMultipleAutocompleteModelChoiceFieldWidget
Autocomplete for multiple model choice fields.
from unfold.widgets import UnfoldBooleanWidget
UnfoldBooleanWidget(
attrs: dict[str, Any] | None = None,
check_test: Callable | None = None
)
Checkbox for boolean fields.
from unfold.widgets import UnfoldBooleanSwitchWidget
UnfoldBooleanSwitchWidget(
attrs: dict[str, Any] | None = None,
check_test: Callable | None = None
)
Toggle switch for boolean fields.
from unfold.widgets import UnfoldAdminRadioSelectWidget
UnfoldAdminRadioSelectWidget(
radio_style: int | None = None,
*args,
**kwargs
)
Radio button group.
Layout style. Use VERTICAL or HORIZONTAL from django.contrib.admin.options.
from unfold.widgets import UnfoldAdminCheckboxSelectMultipleWidget
UnfoldAdminCheckboxSelectMultipleWidget(*args, **kwargs)
Checkbox group for multiple selection.
from unfold.widgets import UnfoldAdminFileFieldWidget
File upload widget.
from unfold.widgets import UnfoldAdminImageFieldWidget
Image upload widget with preview.
from unfold.widgets import UnfoldAdminImageSmallFieldWidget
Compact image upload widget.
from unfold.widgets import UnfoldForeignKeyRawIdWidget
UnfoldForeignKeyRawIdWidget(
rel: ManyToOneRel,
admin_site: AdminSite,
attrs: dict[str, Any] | None = None,
using: Any | None = None
)
Raw ID widget for foreign key fields.
from unfold.widgets import UnfoldAdminRelatedFieldWrapperWidget
Wrapper for related field widgets with add/change/delete links.
from unfold.widgets import UnfoldAdminMoneyWidget
UnfoldAdminMoneyWidget(*args, **kwargs)
Widget for django-money fields. Requires django-money package.
from unfold.widgets import UnfoldAdminLocationWidget
UnfoldAdminLocationWidget(
attrs: dict[str, Any] | None = None,
**kwargs
)
Widget for django-location-field. Requires django-location-field package.
from django import forms
from unfold.widgets import (
UnfoldAdminTextInputWidget,
UnfoldAdminTextareaWidget,
UnfoldBooleanSwitchWidget,
)
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = "__all__"
widgets = {
"title": UnfoldAdminTextInputWidget(
attrs={"prefix_icon": "title"}
),
"content": UnfoldAdminTextareaWidget(),
"is_published": UnfoldBooleanSwitchWidget(),
}
Usage in ModelAdmin
from django.contrib import admin
from unfold.admin import ModelAdmin
from unfold.widgets import UnfoldAdminSplitDateTimeWidget
@admin.register(Article)
class ArticleAdmin(ModelAdmin):
formfield_overrides = {
models.DateTimeField: {"widget": UnfoldAdminSplitDateTimeWidget},
}