diff options
Diffstat (limited to 'django/newforms')
| -rw-r--r-- | django/newforms/fields.py | 22 | ||||
| -rw-r--r-- | django/newforms/forms.py | 2 | ||||
| -rw-r--r-- | django/newforms/models.py | 5 | ||||
| -rw-r--r-- | django/newforms/widgets.py | 7 |
4 files changed, 21 insertions, 15 deletions
diff --git a/django/newforms/fields.py b/django/newforms/fields.py index 3172488d99..a91e5af450 100644 --- a/django/newforms/fields.py +++ b/django/newforms/fields.py @@ -27,9 +27,9 @@ __all__ = ( EMPTY_VALUES = (None, '') try: - set # Only available in Python 2.4+ + set except NameError: - from sets import Set as set # Python 2.3 fallback + from sets import Set as set # Python 2.3 fallback try: from decimal import Decimal @@ -516,11 +516,13 @@ class MultiValueField(Field): """ clean_data = [] errors = ErrorList() - if self.required and not value: - raise ValidationError(ugettext(u'This field is required.')) - elif not self.required and not value: - return self.compress([]) - if not isinstance(value, (list, tuple)): + if not value or isinstance(value, (list, tuple)): + if not value or not [v for v in value if v not in EMPTY_VALUES]: + if self.required: + raise ValidationError(ugettext(u'This field is required.')) + else: + return self.compress([]) + else: raise ValidationError(ugettext(u'Enter a list of values.')) for i, field in enumerate(self.fields): try: @@ -558,5 +560,11 @@ class SplitDateTimeField(MultiValueField): def compress(self, data_list): if data_list: + # Raise a validation error if time or date is empty + # (possible if SplitDateTimeField has required=False). + if data_list[0] in EMPTY_VALUES: + raise ValidationError(ugettext(u'Enter a valid date.')) + if data_list[1] in EMPTY_VALUES: + raise ValidationError(ugettext(u'Enter a valid time.')) return datetime.datetime.combine(*data_list) return None diff --git a/django/newforms/forms.py b/django/newforms/forms.py index 7dd40b60aa..50e6f42108 100644 --- a/django/newforms/forms.py +++ b/django/newforms/forms.py @@ -159,7 +159,7 @@ class BaseForm(StrAndUnicode): def as_p(self): "Returns this form rendered as HTML <p>s." - return self._html_output(u'<p>%(label)s %(field)s%(help_text)s</p>', u'<p>%s</p>', '</p>', u' %s', True) + return self._html_output(u'<p>%(label)s %(field)s%(help_text)s</p>', u'%s', '</p>', u' %s', True) def non_field_errors(self): """ diff --git a/django/newforms/models.py b/django/newforms/models.py index 51d9a5c99e..2803de9675 100644 --- a/django/newforms/models.py +++ b/django/newforms/models.py @@ -20,9 +20,8 @@ def save_instance(form, instance, fields=None, fail_message='saved', commit=True """ Saves bound Form ``form``'s cleaned_data into model instance ``instance``. - Assumes ``form`` has a field for every non-AutoField database field in - ``instance``. If commit=True, then the changes to ``instance`` will be - saved to the database. Returns ``instance``. + If commit=True, then the changes to ``instance`` will be saved to the + database. Returns ``instance``. """ from django.db import models opts = instance.__class__._meta diff --git a/django/newforms/widgets.py b/django/newforms/widgets.py index ae17d753bf..50de37074a 100644 --- a/django/newforms/widgets.py +++ b/django/newforms/widgets.py @@ -3,16 +3,15 @@ HTML Widget classes """ try: - set # Only available in Python 2.4+ + set except NameError: - from sets import Set as set # Python 2.3 fallback -from itertools import chain + from sets import Set as set # Python 2.3 fallback +from itertools import chain from django.utils.datastructures import MultiValueDict from django.utils.html import escape from django.utils.translation import ugettext from django.utils.encoding import StrAndUnicode, force_unicode - from util import flatatt __all__ = ( |
