Opened 13 years ago
Last modified 13 years ago
#19537 closed Bug
Widget CheckboxInput show_hidden_initial _has_changed bug — at Version 4
| Reported by: | Owned by: | nobody | |
|---|---|---|---|
| Component: | Forms | Version: | 1.4 |
| Severity: | Normal | Keywords: | show_hidden_initial |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
django.forms.CheckboxInput have method
def _has_changed(self, initial, data):
# Sometimes data or initial could be None or u'' which should be the
# same thing as False.
return bool(initial) != bool(data)
initial may be u'False' or u'True'
bool(initial) always return True for unicode len(initial) > 1
if initial == u'False' and data == u'on' always return False
bool(u'False') = True
bool(u'on') = True
path:
def _has_changed(self, initial, data):
initial = True if initial == u'True' else False
return initial != bool(data)
Change History (5)
comment:1 by , 13 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
comment:2 by , 13 years ago
my initial data is bool type
ok full test case is
# View is
def document(request, project_id, document_id):
u''' Карточка документа '''
class TestForm(forms.Form):
bool_field = forms.BooleanField(show_hidden_initial=True, required=False)
if request.method == 'POST':
f = TestForm(data=request.POST)
if f.is_valid():
print f.changed_data
else:
# initial is bool type not unicode!
f = TestForm(initial={u'bool_field':False})
return render(request, 'docflow/document.html', {'form':f})
# Template is
<html>
<body>
<form method='post'>
{% csrf_token %}
{{form.as_p}}
<input type='submit'>
</form>
</body>
</html>
# action1
- load page
- checkbox is not cheched by default
- check checkbox and send form (change!)
- print to console is "[]"
CheckboxInput._has_changed arg "initial" == u'False' (not bool False) bool(u'False') == True of course,
but arg "data" == u'on' bool(u'on') == True too
True != True => False
# action2
- load page
- checkbox is not cheched by default
- send form
- print to console is "bool_field"
CheckboxInput._has_changed arg "initial" == u'False' too bool(u'False') => True,
but arg "data" == False bool(False) == False
widget _has_changed => true
comment:3 by , 13 years ago
| Component: | Uncategorized → Forms |
|---|---|
| Resolution: | invalid |
| Status: | closed → new |
reopen tiket
comment:4 by , 13 years ago
| Description: | modified (diff) |
|---|
by , 13 years ago
| Attachment: | 19537-1.diff added |
|---|
Note:
See TracTickets
for help on using tickets.
By default, any non-empty string is considered as a
Truevalue, even"False". You should fix the initial value passed to the form in your code.