diff options
| author | Tim Graham <timograham@gmail.com> | 2017-04-29 19:00:21 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-04-29 22:24:29 -0400 |
| commit | a2975cb083a01012eb0cb997f0f5b7c2263cfbba (patch) | |
| tree | a4bbcff5c4b318c4c2536d846bb4f88081e00fcc /django | |
| parent | 0f60333534a806bc97609f98c02fd14128adbfae (diff) | |
[1.11.x] Fixed #28040 -- Updated SplitArrayWidget to use template-based widget rendering.
Thanks Preston Timmons for review.
Backport of 1ebd295082bb0e6b230cf3bc39fd04bee71c2bd7 from master
Diffstat (limited to 'django')
3 files changed, 11 insertions, 8 deletions
diff --git a/django/contrib/postgres/forms/array.py b/django/contrib/postgres/forms/array.py index 9830c8de48..4fbeca8877 100644 --- a/django/contrib/postgres/forms/array.py +++ b/django/contrib/postgres/forms/array.py @@ -7,7 +7,6 @@ from django.contrib.postgres.validators import ( ) from django.core.exceptions import ValidationError from django.utils import six -from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from ..utils import prefix_validation_error @@ -91,6 +90,7 @@ class SimpleArrayField(forms.CharField): class SplitArrayWidget(forms.Widget): + template_name = 'postgres/widgets/split_array.html' def __init__(self, widget, size, **kwargs): self.widget = widget() if isinstance(widget, type) else widget @@ -117,11 +117,13 @@ class SplitArrayWidget(forms.Widget): id_ += '_0' return id_ - def render(self, name, value, attrs=None, renderer=None): + def get_context(self, name, value, attrs=None): + attrs = {} if attrs is None else attrs + context = super(SplitArrayWidget, self).get_context(name, value, attrs) if self.is_localized: self.widget.is_localized = self.is_localized value = value or [] - output = [] + context['widget']['subwidgets'] = [] final_attrs = self.build_attrs(attrs) id_ = final_attrs.get('id') for i in range(max(len(value), self.size)): @@ -131,11 +133,10 @@ class SplitArrayWidget(forms.Widget): widget_value = None if id_: final_attrs = dict(final_attrs, id='%s_%s' % (id_, i)) - output.append(self.widget.render(name + '_%s' % i, widget_value, final_attrs, renderer)) - return mark_safe(self.format_output(output)) - - def format_output(self, rendered_widgets): - return ''.join(rendered_widgets) + context['widget']['subwidgets'].append( + self.widget.get_context(name + '_%s' % i, widget_value, final_attrs)['widget'] + ) + return context @property def media(self): diff --git a/django/contrib/postgres/jinja2/postgres/widgets/split_array.html b/django/contrib/postgres/jinja2/postgres/widgets/split_array.html new file mode 100644 index 0000000000..32fda82609 --- /dev/null +++ b/django/contrib/postgres/jinja2/postgres/widgets/split_array.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/django/contrib/postgres/templates/postgres/widgets/split_array.html b/django/contrib/postgres/templates/postgres/widgets/split_array.html new file mode 100644 index 0000000000..32fda82609 --- /dev/null +++ b/django/contrib/postgres/templates/postgres/widgets/split_array.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} |
