summaryrefslogtreecommitdiff
path: root/django/contrib/postgres/forms/array.py
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2017-04-29 19:00:21 -0400
committerTim Graham <timograham@gmail.com>2017-04-29 22:24:29 -0400
commita2975cb083a01012eb0cb997f0f5b7c2263cfbba (patch)
treea4bbcff5c4b318c4c2536d846bb4f88081e00fcc /django/contrib/postgres/forms/array.py
parent0f60333534a806bc97609f98c02fd14128adbfae (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/contrib/postgres/forms/array.py')
-rw-r--r--django/contrib/postgres/forms/array.py17
1 files changed, 9 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):