summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
authorTome Cvitan <tome@cvitan.com>2013-05-18 13:26:07 +0200
committerClaude Paroz <claude@2xlibre.net>2013-05-18 22:30:24 +0200
commitcaf56ad1743778bad8af6b51b08f5baa342d4cd2 (patch)
treea875fb8105c095adca745b915f34626a218cabd1 /django/forms
parent0038296135502331c302935106d7aa568f715200 (diff)
Fixed #20440 -- Ensured CharField's max_length/min_length are integers
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/fields.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py
index 3ef0d72463..ac68b9f1fc 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -198,14 +198,15 @@ class Field(object):
result.validators = self.validators[:]
return result
+
class CharField(Field):
def __init__(self, max_length=None, min_length=None, *args, **kwargs):
self.max_length, self.min_length = max_length, min_length
super(CharField, self).__init__(*args, **kwargs)
if min_length is not None:
- self.validators.append(validators.MinLengthValidator(min_length))
+ self.validators.append(validators.MinLengthValidator(int(min_length)))
if max_length is not None:
- self.validators.append(validators.MaxLengthValidator(max_length))
+ self.validators.append(validators.MaxLengthValidator(int(max_length)))
def to_python(self, value):
"Returns a Unicode object."
@@ -220,6 +221,7 @@ class CharField(Field):
attrs.update({'maxlength': str(self.max_length)})
return attrs
+
class IntegerField(Field):
default_error_messages = {
'invalid': _('Enter a whole number.'),
@@ -444,6 +446,7 @@ class TimeField(BaseTemporalField):
def strptime(self, value, format):
return datetime.datetime.strptime(force_str(value), format).time()
+
class DateTimeField(BaseTemporalField):
widget = DateTimeInput
input_formats = formats.get_format_lazy('DATETIME_INPUT_FORMATS')
@@ -482,6 +485,7 @@ class DateTimeField(BaseTemporalField):
def strptime(self, value, format):
return datetime.datetime.strptime(force_str(value), format)
+
class RegexField(CharField):
def __init__(self, regex, max_length=None, min_length=None, error_message=None, *args, **kwargs):
"""
@@ -511,6 +515,7 @@ class RegexField(CharField):
regex = property(_get_regex, _set_regex)
+
class EmailField(CharField):
widget = EmailInput
default_validators = [validators.validate_email]
@@ -519,6 +524,7 @@ class EmailField(CharField):
value = self.to_python(value).strip()
return super(EmailField, self).clean(value)
+
class FileField(Field):
widget = ClearableFileInput
default_error_messages = {
@@ -626,6 +632,7 @@ class ImageField(FileField):
f.seek(0)
return f
+
class URLField(CharField):
widget = URLInput
default_error_messages = {
@@ -792,6 +799,7 @@ class ChoiceField(Field):
return True
return False
+
class TypedChoiceField(ChoiceField):
def __init__(self, *args, **kwargs):
self.coerce = kwargs.pop('coerce', lambda val: val)
@@ -903,6 +911,7 @@ class ComboField(Field):
value = field.clean(value)
return value
+
class MultiValueField(Field):
"""
A Field that aggregates the logic of multiple Fields.
@@ -1047,6 +1056,7 @@ class FilePathField(ChoiceField):
self.widget.choices = self.choices
+
class SplitDateTimeField(MultiValueField):
widget = SplitDateTimeWidget
hidden_widget = SplitHiddenDateTimeWidget