Fix admin form rendering

This commit is contained in:
Tobias Kunze 2025-03-20 09:19:10 +01:00
parent 314ecc9c0d
commit 1b69310c77

View file

@ -1,4 +1,5 @@
from django.forms.renderers import TemplatesSetting
from django.forms.widgets import Textarea
def inject_class(f, class_name):
@ -21,11 +22,22 @@ class VerticalFormRenderer(TemplatesSetting):
return "form-check-input"
return "form-control"
def get_widget_input_type(self, widget):
if isinstance(widget, Textarea):
return "textarea"
return widget.input_type
def get_field_input_type(self, field):
widget = field.field.widget
if inner_widget := getattr(widget, "widget", None):
widget = inner_widget
return self.get_widget_input_type(widget)
def render(self, template_name, context, request=None):
if field := context.get("field"):
input_type = self.get_field_input_type(field)
field.build_widget_attrs = inject_class(
field.build_widget_attrs,
self.get_class_names(field.field.widget.input_type),
field.build_widget_attrs, self.get_class_names(input_type)
)
return super().render(template_name, context, request)