Skip to content

Field

Field

djadmin.layout.Field

A single form field declaration.

Part of core djadmin. Works with or without djadmin-formset plugin.

Examples

Basic

Field('name')

With customization

Field('price', label='Unit Price ($)', required=True)

With widget (supports shortcuts!)

Field('bio', widget='textarea', attrs={'rows': 5}) Field('bio', widget=Textarea(attrs={'rows': 5})) # Also works

Conditional visibility (⚠️ requires djadmin-formset plugin!)

Field('ebook_size', show_if=".format === 'ebook'")

Computed values (⚠️ requires djadmin-formset plugin!)

Field('total', calculate='.price * .quantity')

Width control (flexbox)

Field('first_name', css_classes=['flex-1', 'pr-2'])

Method Resolution Order

  1. djadmin.layout.Field

Attributes

Attribute Value Defined in
__annotations__ {'name': <class 'str'>, 'label': str | None, 'widget': ty... djadmin.layout.Field
__dataclass_fields__ {'name': Field(name='name',type=<class 'str'>,default=<da... djadmin.layout.Field
__dataclass_params__ _DataclassParams(init=True,repr=True,eq=True,order=False,... djadmin.layout.Field
__hash__ None djadmin.layout.Field
__match_args__ ('name', 'label', 'widget', 'required', 'help_text', 'ini... djadmin.layout.Field
calculate None djadmin.layout.Field
help_text None djadmin.layout.Field
hide_if None djadmin.layout.Field
initial None djadmin.layout.Field
label None djadmin.layout.Field
required None djadmin.layout.Field
show_if None djadmin.layout.Field
widget None djadmin.layout.Field

Methods

__eq__(self, other)

Defined in: <class 'djadmin.layout.Field'>

Return self==value.

__init__(self, name: str, label: str | None = None, widget: type[django.forms.widgets.Widget] | django.forms.widgets.Widget | str | None = None, required: bool | None = None, help_text: str | None = None, initial: typing.Any | None = None, show_if: str | None = None, hide_if: str | None = None, calculate: str | None = None, css_classes: list[str] = <factory>, attrs: dict = <factory>, extra_kwargs: dict = <factory>) -> None

Defined in: <class 'djadmin.layout.Field'>

Initialize self. See help(type(self)) for accurate signature.

__post_init__(self)

Defined in: <class 'djadmin.layout.Field'>

Validation after initialization.

Source code in layout.py line 83
    def __post_init__(self):
        """Validation after initialization."""
        if self.show_if and self.hide_if:
            raise ValueError(f"Field '{self.name}' cannot have both show_if and hide_if")

        # Resolve widget shortcuts
        if isinstance(self.widget, str):
            self.widget = self._resolve_widget_shortcut(self.widget)

__repr__(self)

Defined in: <class 'djadmin.layout.Field'>

String representation with only non-default values.

Source code in layout.py line 227
    def __repr__(self):
        """String representation with only non-default values."""
        parts = [repr(self.name)]
        if self.label:
            parts.append(f'label={self.label!r}')
        if self.widget:
            # Show widget class name, not full repr
            if hasattr(self.widget, '__name__'):
                parts.append(f'widget={self.widget.__name__}')
            elif hasattr(self.widget, '__class__'):
                parts.append(f'widget={self.widget.__class__.__name__}')
            else:
                parts.append(f'widget={self.widget!r}')
        if self.required is not None:
            parts.append(f'required={self.required!r}')
        if self.help_text:
            parts.append(f'help_text={self.help_text!r}')
        if self.initial is not None:
            parts.append(f'initial={self.initial!r}')
        if self.show_if:
            parts.append(f'show_if={self.show_if!r}')
        if self.hide_if:
            parts.append(f'hide_if={self.hide_if!r}')
        if self.calculate:
            parts.append(f'calculate={self.calculate!r}')
        if self.css_classes:
            parts.append(f'css_classes={self.css_classes!r}')
        if self.attrs:
            parts.append(f'attrs={self.attrs!r}')
        if self.extra_kwargs:
            parts.append(f'extra_kwargs={self.extra_kwargs!r}')
        return f"Field({', '.join(parts)})"

has_advanced_features(self) -> bool

Defined in: <class 'djadmin.layout.Field'>

Check if this field uses features requiring djadmin-formset.

Source code in layout.py line 148
    def has_advanced_features(self) -> bool:
        """Check if this field uses features requiring djadmin-formset."""
        return bool(self.show_if or self.hide_if or self.calculate)

render_for_display(self, obj) -> dict

Defined in: <class 'djadmin.layout.Field'>

Render field for display (read-only view).

Args: obj: Model instance to get field value from

Returns: Dict with field display data: { 'type': 'field', 'name': str, 'label': str, 'value': Any, 'css_classes': list, }

Source code in layout.py line 152
    def render_for_display(self, obj) -> dict:
        """
        Render field for display (read-only view).

        Args:
            obj: Model instance to get field value from

        Returns:
            Dict with field display data:
            {
                'type': 'field',
                'name': str,
                'label': str,
                'value': Any,
                'css_classes': list,
            }
        """
        # Get field value from object
        value = getattr(obj, self.name, None)

        # Get display label (use custom label or field verbose_name)
        if self.label:
            label = self.label
        else:
            # Try to get verbose_name from model field
            try:
                field = obj._meta.get_field(self.name)
                label = field.verbose_name.title()
            except Exception:
                # Fallback: capitalize field name
                label = self.name.replace('_', ' ').title()

        # Get display value (handle special cases)
        display_value = self._get_display_value(obj, value)

        return {
            'type': 'field',
            'name': self.name,
            'label': label,
            'value': display_value,
            'css_classes': self.css_classes,
        }

Fields

Field Type Related To
__dict__ getset_descriptor -
__weakref__ getset_descriptor -