Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #17976 -- Made forms.BooleanField pickleable.

This was a regression in Django 1.4.
Thanks bronger for the report and claudep for the patch.
  • Loading branch information...
commit 9350d1d59c1a4e6a9ac246a808f55da35de0df69 1 parent 02a5b41
@aaugustin aaugustin authored
View
11 django/forms/widgets.py
@@ -487,15 +487,18 @@ def _has_changed(self, initial, data):
pass
return super(TimeInput, self)._has_changed(self._format_value(initial), data)
+
+# Defined at module level so that CheckboxInput is picklable (#17976)
+def boolean_check(v):
+ return not (v is False or v is None or v == '')
+
+
class CheckboxInput(Widget):
def __init__(self, attrs=None, check_test=None):
super(CheckboxInput, self).__init__(attrs)
# check_test is a callable that takes a value and returns True
# if the checkbox should be checked for that value.
- if check_test is None:
- self.check_test = lambda v: not (v is False or v is None or v == '')
- else:
- self.check_test = check_test
+ self.check_test = boolean_check if check_test is None else check_test
def render(self, name, value, attrs=None):
final_attrs = self.build_attrs(attrs, type='checkbox', name=name)
View
4 tests/regressiontests/forms/tests/fields.py
@@ -25,6 +25,7 @@
__init__(). For example, CharField has a max_length option.
"""
import datetime
+import pickle
import re
import os
import warnings
@@ -690,6 +691,9 @@ def test_booleanfield_2(self):
self.assertEqual(False, f.clean('false'))
self.assertEqual(False, f.clean('FaLsE'))
+ def test_boolean_picklable(self):
+ self.assertIsInstance(pickle.loads(pickle.dumps(BooleanField())), BooleanField)
+
# ChoiceField #################################################################
def test_choicefield_1(self):
Please sign in to comment.
Something went wrong with that request. Please try again.