Opened 8 years ago
Last modified 8 years ago
#28058 closed Bug
Empty Select widget (no choices) evaluates to False — at Version 1
Reported by: | László Károlyi | Owned by: | nobody |
---|---|---|---|
Component: | Forms | Version: | 1.11 |
Severity: | Release blocker | Keywords: | select widget |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Hey guys,
I'm not sure I catched a bug, but I discovered a change between Django==1.10.6
and 1.11.
When you initialize a form with a Select
widget, and the select widget has no choices (basically an empty tuple), when evaluating the field with bool()
, it will evaluate to False
. This causes the django_widget_tweaks
module not to render a widget when trying to modify it from within a template, as it uses a bool-like evaluation to check if anything is passed to the set_attr.
code to reproduce:
from django import forms class MyForm(forms.Form): select = forms.ChoiceField(choices=()) x = MyForm() for item in x: print(bool(item))
It will print True
with Django==1.10.6
, and False
with Django==1.11
.
The underlying problem is that len()
for a Boundfield with no choices will return 0 in the newer version, whereas it returns 1 in the older version.
the template code that fails to render with Django==1.11
{{ widget|set_attr('style:width: 100%') }}
Like I said, I'm not sure if this change is intended, nevertheless I reported it. Please let me know if this is intended, so I can let the creator of django_widget_tweaks
know.
Cheers