Fix admin form rendering
This commit is contained in:
parent
314ecc9c0d
commit
1b69310c77
1 changed files with 14 additions and 2 deletions
|
@ -1,4 +1,5 @@
|
||||||
from django.forms.renderers import TemplatesSetting
|
from django.forms.renderers import TemplatesSetting
|
||||||
|
from django.forms.widgets import Textarea
|
||||||
|
|
||||||
|
|
||||||
def inject_class(f, class_name):
|
def inject_class(f, class_name):
|
||||||
|
@ -21,11 +22,22 @@ class VerticalFormRenderer(TemplatesSetting):
|
||||||
return "form-check-input"
|
return "form-check-input"
|
||||||
return "form-control"
|
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):
|
def render(self, template_name, context, request=None):
|
||||||
if field := context.get("field"):
|
if field := context.get("field"):
|
||||||
|
input_type = self.get_field_input_type(field)
|
||||||
field.build_widget_attrs = inject_class(
|
field.build_widget_attrs = inject_class(
|
||||||
field.build_widget_attrs,
|
field.build_widget_attrs, self.get_class_names(input_type)
|
||||||
self.get_class_names(field.field.widget.input_type),
|
|
||||||
)
|
)
|
||||||
return super().render(template_name, context, request)
|
return super().render(template_name, context, request)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue