Skip to content

Commit

Permalink
Add renderer argument to render() method of BooleanWidget (carl…
Browse files Browse the repository at this point in the history
…tongibson#923)

* Add `renderer` argument to render method.

This ought to help against:
> .../lib/python3.6/site-packages/django/forms/boundfield.py:36:
> RemovedInDjango21Warning: Add the `renderer` argument to the render() method
> of <class 'django_filters.widgets.BooleanWidget'>. It will be mandatory in
> Django 2.1.

The renderer argument was added in Django 1.11: https://docs.djangoproject.com/en/2.0/ref/forms/widgets/#django.forms.Widget.render

* Add `renderer` parameter to `BaseCSVWidget.render()`

This is then passed on to the super() call and also the render() call of the
`surrogate`: it's a TextInput and hence a Widget as well.

* Add renderer argument to LinkWidget
  • Loading branch information
bronsen authored and carltongibson committed Jul 13, 2018
1 parent 195aafd commit 4d295a0
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions django_filters/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def value_from_datadict(self, data, files, name):
self.data = data
return value

def render(self, name, value, attrs=None, choices=()):
def render(self, name, value, attrs=None, choices=(), renderer=None):
if not hasattr(self, 'data'):
self.data = {}
if value is None:
Expand Down Expand Up @@ -161,7 +161,7 @@ def __init__(self, attrs=None):
('false', _('No')))
super().__init__(attrs, choices)

def render(self, name, value, attrs=None):
def render(self, name, value, attrs=None, renderer=None):
try:
value = {
True: 'true',
Expand All @@ -171,7 +171,7 @@ def render(self, name, value, attrs=None):
}[value]
except KeyError:
value = ''
return super().render(name, value, attrs)
return super().render(name, value, attrs, renderer=renderer)

def value_from_datadict(self, data, files, name):
value = data.get(name, None)
Expand Down Expand Up @@ -201,22 +201,22 @@ def value_from_datadict(self, data, files, name):
return value.split(',')
return None

def render(self, name, value, attrs=None):
def render(self, name, value, attrs=None, renderer=None):
if not self._isiterable(value):
value = [value]

if len(value) <= 1:
# delegate to main widget (Select, etc...) if not multiple values
value = value[0] if value else ''
return super().render(name, value, attrs)
return super().render(name, value, attrs, renderer=renderer)

# if we have multiple values, we need to force render as a text input
# (otherwise, the additional values are lost)
surrogate = forms.TextInput()
value = [force_text(surrogate.format_value(v)) for v in value]
value = ','.join(list(value))

return surrogate.render(name, value, attrs)
return surrogate.render(name, value, attrs, renderer=renderer)


class CSVWidget(BaseCSVWidget, forms.TextInput):
Expand Down

0 comments on commit 4d295a0

Please sign in to comment.