summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2014-03-13 16:55:38 +0100
committerClaude Paroz <claude@2xlibre.net>2014-03-13 16:58:14 +0100
commit5a976b4bec79cdb6b75581be6478356fb13fda77 (patch)
tree28a034dcc3a19ced90d0cafd9152cf7b212e8406
parent958b511a80c01ac010561c8fefe4548203700fa3 (diff)
Fixed #22245 -- Avoided widget overwrite in forms.IntegerField subclasses
Thanks Jeroen Pulles for the report and Simon Charette for the review.
-rw-r--r--django/forms/fields.py5
-rw-r--r--docs/releases/1.6.3.txt5
-rw-r--r--tests/forms_tests/tests/test_fields.py12
3 files changed, 21 insertions, 1 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py
index b9a3d4d6c5..63ed153f0b 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -231,13 +231,16 @@ class CharField(Field):
class IntegerField(Field):
+ widget = NumberInput
default_error_messages = {
'invalid': _('Enter a whole number.'),
}
def __init__(self, max_value=None, min_value=None, *args, **kwargs):
self.max_value, self.min_value = max_value, min_value
- kwargs.setdefault('widget', NumberInput if not kwargs.get('localize') else self.widget)
+ if kwargs.get('localize') and self.widget == NumberInput:
+ # Localized number input is not well supported on most browsers
+ kwargs.setdefault('widget', super(IntegerField, self).widget)
super(IntegerField, self).__init__(*args, **kwargs)
if max_value is not None:
diff --git a/docs/releases/1.6.3.txt b/docs/releases/1.6.3.txt
index a8b63dc72a..004e70f663 100644
--- a/docs/releases/1.6.3.txt
+++ b/docs/releases/1.6.3.txt
@@ -18,3 +18,8 @@ several bugs in 1.6.2:
* Fixed crash of ``QuerySet``\s that use ``F() + timedelta()`` when their query
was compiled more once
(`#21643 <http://code.djangoproject.com/ticket/21643>`_).
+
+* Prevented custom ``widget`` class attribute of
+ :class:`~django.forms.IntegerField` subclasses from being overwritten by the
+ code in their ``__init__`` method
+ (`#22245 <http://code.djangoproject.com/ticket/22245>`_).
diff --git a/tests/forms_tests/tests/test_fields.py b/tests/forms_tests/tests/test_fields.py
index 5a42e4b95d..454a8349d7 100644
--- a/tests/forms_tests/tests/test_fields.py
+++ b/tests/forms_tests/tests/test_fields.py
@@ -239,6 +239,18 @@ class FieldsTests(SimpleTestCase):
f1 = IntegerField(localize=True)
self.assertWidgetRendersTo(f1, '<input id="id_f" name="f" type="text" />')
+ def test_integerfield_subclass(self):
+ """
+ Test that class-defined widget is not overwritten by __init__ (#22245).
+ """
+ class MyIntegerField(IntegerField):
+ widget = Textarea
+
+ f = MyIntegerField()
+ self.assertEqual(f.widget.__class__, Textarea)
+ f = MyIntegerField(localize=True)
+ self.assertEqual(f.widget.__class__, Textarea)
+
# FloatField ##################################################################
def test_floatfield_1(self):