mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #13631 -- Made sure that max_length and min_length are retained as attributes on form fields. Thanks to mila for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15194 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		| @@ -224,6 +224,7 @@ class IntegerField(Field): | ||||
|     } | ||||
|  | ||||
|     def __init__(self, max_value=None, min_value=None, *args, **kwargs): | ||||
|         self.max_value, self.min_value = max_value, min_value | ||||
|         super(IntegerField, self).__init__(*args, **kwargs) | ||||
|  | ||||
|         if max_value is not None: | ||||
| @@ -279,6 +280,7 @@ class DecimalField(Field): | ||||
|     } | ||||
|  | ||||
|     def __init__(self, max_value=None, min_value=None, max_digits=None, decimal_places=None, *args, **kwargs): | ||||
|         self.max_value, self.min_value = max_value, min_value | ||||
|         self.max_digits, self.decimal_places = max_digits, decimal_places | ||||
|         Field.__init__(self, *args, **kwargs) | ||||
|  | ||||
| @@ -587,7 +589,7 @@ class URLField(CharField): | ||||
|                 url_fields[0] = 'http' | ||||
|             if not url_fields[1]: | ||||
|                 # Assume that if no domain is provided, that the path segment | ||||
|                 # contains the domain.  | ||||
|                 # contains the domain. | ||||
|                 url_fields[1] = url_fields[2] | ||||
|                 url_fields[2] = '' | ||||
|                 # Rebuild the url_fields list, since the domain segment may now | ||||
|   | ||||
| @@ -69,6 +69,8 @@ class FieldsTests(TestCase): | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None) | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '') | ||||
|         self.assertEqual(u'[1, 2, 3]', f.clean([1, 2, 3])) | ||||
|         self.assertEqual(f.max_length, None) | ||||
|         self.assertEqual(f.min_length, None) | ||||
|  | ||||
|     def test_charfield_2(self): | ||||
|         f = CharField(required=False) | ||||
| @@ -77,12 +79,16 @@ class FieldsTests(TestCase): | ||||
|         self.assertEqual(u'', f.clean(None)) | ||||
|         self.assertEqual(u'', f.clean('')) | ||||
|         self.assertEqual(u'[1, 2, 3]', f.clean([1, 2, 3])) | ||||
|         self.assertEqual(f.max_length, None) | ||||
|         self.assertEqual(f.min_length, None) | ||||
|  | ||||
|     def test_charfield_3(self): | ||||
|         f = CharField(max_length=10, required=False) | ||||
|         self.assertEqual(u'12345', f.clean('12345')) | ||||
|         self.assertEqual(u'1234567890', f.clean('1234567890')) | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at most 10 characters (it has 11).']", f.clean, '1234567890a') | ||||
|         self.assertEqual(f.max_length, 10) | ||||
|         self.assertEqual(f.min_length, None) | ||||
|  | ||||
|     def test_charfield_4(self): | ||||
|         f = CharField(min_length=10, required=False) | ||||
| @@ -90,6 +96,8 @@ class FieldsTests(TestCase): | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at least 10 characters (it has 5).']", f.clean, '12345') | ||||
|         self.assertEqual(u'1234567890', f.clean('1234567890')) | ||||
|         self.assertEqual(u'1234567890a', f.clean('1234567890a')) | ||||
|         self.assertEqual(f.max_length, None) | ||||
|         self.assertEqual(f.min_length, 10) | ||||
|  | ||||
|     def test_charfield_5(self): | ||||
|         f = CharField(min_length=10, required=True) | ||||
| @@ -97,6 +105,8 @@ class FieldsTests(TestCase): | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at least 10 characters (it has 5).']", f.clean, '12345') | ||||
|         self.assertEqual(u'1234567890', f.clean('1234567890')) | ||||
|         self.assertEqual(u'1234567890a', f.clean('1234567890a')) | ||||
|         self.assertEqual(f.max_length, None) | ||||
|         self.assertEqual(f.min_length, 10) | ||||
|  | ||||
|     # IntegerField ################################################################ | ||||
|  | ||||
| @@ -114,6 +124,8 @@ class FieldsTests(TestCase): | ||||
|         self.assertEqual(1, f.clean(' 1')) | ||||
|         self.assertEqual(1, f.clean(' 1 ')) | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a whole number.']", f.clean, '1a') | ||||
|         self.assertEqual(f.max_value, None) | ||||
|         self.assertEqual(f.min_value, None) | ||||
|  | ||||
|     def test_integerfield_2(self): | ||||
|         f = IntegerField(required=False) | ||||
| @@ -129,6 +141,8 @@ class FieldsTests(TestCase): | ||||
|         self.assertEqual(1, f.clean(' 1')) | ||||
|         self.assertEqual(1, f.clean(' 1 ')) | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a whole number.']", f.clean, '1a') | ||||
|         self.assertEqual(f.max_value, None) | ||||
|         self.assertEqual(f.min_value, None) | ||||
|  | ||||
|     def test_integerfield_3(self): | ||||
|         f = IntegerField(max_value=10) | ||||
| @@ -138,6 +152,8 @@ class FieldsTests(TestCase): | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is less than or equal to 10.']", f.clean, 11) | ||||
|         self.assertEqual(10, f.clean('10')) | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is less than or equal to 10.']", f.clean, '11') | ||||
|         self.assertEqual(f.max_value, 10) | ||||
|         self.assertEqual(f.min_value, None) | ||||
|  | ||||
|     def test_integerfield_4(self): | ||||
|         f = IntegerField(min_value=10) | ||||
| @@ -147,6 +163,8 @@ class FieldsTests(TestCase): | ||||
|         self.assertEqual(11, f.clean(11)) | ||||
|         self.assertEqual(10, f.clean('10')) | ||||
|         self.assertEqual(11, f.clean('11')) | ||||
|         self.assertEqual(f.max_value, None) | ||||
|         self.assertEqual(f.min_value, 10) | ||||
|  | ||||
|     def test_integerfield_5(self): | ||||
|         f = IntegerField(min_value=10, max_value=20) | ||||
| @@ -158,6 +176,8 @@ class FieldsTests(TestCase): | ||||
|         self.assertEqual(11, f.clean('11')) | ||||
|         self.assertEqual(20, f.clean(20)) | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is less than or equal to 20.']", f.clean, 21) | ||||
|         self.assertEqual(f.max_value, 20) | ||||
|         self.assertEqual(f.min_value, 10) | ||||
|  | ||||
|     # FloatField ################################################################## | ||||
|  | ||||
| @@ -176,12 +196,16 @@ class FieldsTests(TestCase): | ||||
|         self.assertEqual(1.0, f.clean(' 1.0')) | ||||
|         self.assertEqual(1.0, f.clean(' 1.0 ')) | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, '1.0a') | ||||
|         self.assertEqual(f.max_value, None) | ||||
|         self.assertEqual(f.min_value, None) | ||||
|  | ||||
|     def test_floatfield_2(self): | ||||
|         f = FloatField(required=False) | ||||
|         self.assertEqual(None, f.clean('')) | ||||
|         self.assertEqual(None, f.clean(None)) | ||||
|         self.assertEqual(1.0, f.clean('1')) | ||||
|         self.assertEqual(f.max_value, None) | ||||
|         self.assertEqual(f.min_value, None) | ||||
|  | ||||
|     def test_floatfield_3(self): | ||||
|         f = FloatField(max_value=1.5, min_value=0.5) | ||||
| @@ -189,6 +213,8 @@ class FieldsTests(TestCase): | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is greater than or equal to 0.5.']", f.clean, '0.4') | ||||
|         self.assertEqual(1.5, f.clean('1.5')) | ||||
|         self.assertEqual(0.5, f.clean('0.5')) | ||||
|         self.assertEqual(f.max_value, 1.5) | ||||
|         self.assertEqual(f.min_value, 0.5) | ||||
|  | ||||
|     # DecimalField ################################################################ | ||||
|  | ||||
| @@ -222,12 +248,20 @@ class FieldsTests(TestCase): | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 2 decimal places.']", f.clean, '-000.123') | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 4 digits in total.']", f.clean, '-000.12345') | ||||
|         self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, '--0.12') | ||||
|         self.assertEqual(f.max_digits, 4) | ||||
|         self.assertEqual(f.decimal_places, 2) | ||||
|         self.assertEqual(f.max_value, None) | ||||
|         self.assertEqual(f.min_value, None) | ||||
|  | ||||
|     def test_decimalfield_2(self): | ||||
|         f = DecimalField(max_digits=4, decimal_places=2, required=False) | ||||
|         self.assertEqual(None, f.clean('')) | ||||
|         self.assertEqual(None, f.clean(None)) | ||||
|         self.assertEqual(f.clean('1'), Decimal("1")) | ||||
|         self.assertEqual(f.max_digits, 4) | ||||
|         self.assertEqual(f.decimal_places, 2) | ||||
|         self.assertEqual(f.max_value, None) | ||||
|         self.assertEqual(f.min_value, None) | ||||
|  | ||||
|     def test_decimalfield_3(self): | ||||
|         f = DecimalField(max_digits=4, decimal_places=2, max_value=Decimal('1.5'), min_value=Decimal('0.5')) | ||||
| @@ -237,6 +271,10 @@ class FieldsTests(TestCase): | ||||
|         self.assertEqual(f.clean('0.5'), Decimal("0.5")) | ||||
|         self.assertEqual(f.clean('.5'), Decimal("0.5")) | ||||
|         self.assertEqual(f.clean('00.50'), Decimal("0.50")) | ||||
|         self.assertEqual(f.max_digits, 4) | ||||
|         self.assertEqual(f.decimal_places, 2) | ||||
|         self.assertEqual(f.max_value, Decimal('1.5')) | ||||
|         self.assertEqual(f.min_value, Decimal('0.5')) | ||||
|  | ||||
|     def test_decimalfield_4(self): | ||||
|         f = DecimalField(decimal_places=2) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user