From 69cf0df166583a0038f96446903635cdef6645fd Mon Sep 17 00:00:00 2001 From: seroy Date: Tue, 18 Jul 2017 00:29:44 +0300 Subject: [PATCH] Use template-based widget rendering in AdminLocalizedFieldWidget --- localized_fields/widgets.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/localized_fields/widgets.py b/localized_fields/widgets.py index ab1fdcc..9163fcf 100644 --- a/localized_fields/widgets.py +++ b/localized_fields/widgets.py @@ -48,6 +48,38 @@ class LocalizedFieldWidget(forms.MultiWidget): return result + def get_context(self, name, value, attrs): + context = super(forms.MultiWidget, self).get_context(name, value, attrs) + if self.is_localized: + for widget in self.widgets: + widget.is_localized = self.is_localized + # value is a list of values, each corresponding to a widget + # in self.widgets. + if not isinstance(value, list): + value = self.decompress(value) + + final_attrs = context['widget']['attrs'] + input_type = final_attrs.pop('type', None) + id_ = final_attrs.get('id') + subwidgets = [] + for i, widget in enumerate(self.widgets): + if input_type is not None: + widget.input_type = input_type + widget_name = '%s_%s' % (name, i) + try: + widget_value = value[i] + except IndexError: + widget_value = None + if id_: + widget_attrs = final_attrs.copy() + widget_attrs['id'] = '%s_%s' % (id_, i) + else: + widget_attrs = final_attrs + widget_attrs = self.build_widget_attrs(widget, widget_value, widget_attrs) + subwidgets.append(widget.get_context(widget_name, widget_value, widget_attrs)['widget']) + context['widget']['subwidgets'] = subwidgets + return context + @staticmethod def build_widget_attrs(widget, value, attrs): attrs = dict(attrs) # Copy attrs to avoid modifying the argument.