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
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 |
- |