diff --git a/src/servala/frontend/forms/renderers.py b/src/servala/frontend/forms/renderers.py index 90ce926..24e412b 100644 --- a/src/servala/frontend/forms/renderers.py +++ b/src/servala/frontend/forms/renderers.py @@ -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)