diff options
| author | Adrian Holovaty <adrian@holovaty.com> | 2008-07-18 03:47:27 +0000 |
|---|---|---|
| committer | Adrian Holovaty <adrian@holovaty.com> | 2008-07-18 03:47:27 +0000 |
| commit | df2b19cc17666fe36a8153c3de45b20ffe3334ab (patch) | |
| tree | d491426d07dba69bfddbfb4aaa2f632331b30ef9 /django/db | |
| parent | f6fafc02c8ba60b950bbe6be3b3ba729038dbb0a (diff) | |
Fixed #1443 -- Django's various bits now support dates before 1900. Thanks to SmileyChris, Chris Green, Fredrik Lundh and others for patches and design help
git-svn-id: http://code.djangoproject.com/svn/django/trunk@7946 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db')
| -rw-r--r-- | django/db/models/fields/__init__.py | 20 | ||||
| -rw-r--r-- | django/db/models/manipulators.py | 2 |
2 files changed, 17 insertions, 5 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 545df612e4..34c7323f01 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -23,6 +23,7 @@ from django.utils.text import capfirst from django.utils.translation import ugettext_lazy, ugettext as _ from django.utils.encoding import smart_unicode, force_unicode, smart_str from django.utils.maxlength import LegacyMaxlength +from django.utils import datetime_safe class NOT_PROVIDED: pass @@ -557,7 +558,7 @@ class DateField(Field): if lookup_type in ('range', 'in'): value = [smart_unicode(v) for v in value] elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte') and hasattr(value, 'strftime'): - value = value.strftime('%Y-%m-%d') + value = datetime_safe.new_date(value).strftime('%Y-%m-%d') else: value = smart_unicode(value) return Field.get_db_prep_lookup(self, lookup_type, value) @@ -589,7 +590,7 @@ class DateField(Field): # Casts dates into string format for entry into database. if value is not None: try: - value = value.strftime('%Y-%m-%d') + value = datetime_safe.new_date(value).strftime('%Y-%m-%d') except AttributeError: # If value is already a string it won't have a strftime method, # so we'll just let it pass through. @@ -601,7 +602,11 @@ class DateField(Field): def flatten_data(self, follow, obj=None): val = self._get_val_from_obj(obj) - return {self.attname: (val is not None and val.strftime("%Y-%m-%d") or '')} + if val is None: + data = '' + else: + data = datetime_safe.new_date(val).strftime("%Y-%m-%d") + return {self.attname: data} def formfield(self, **kwargs): defaults = {'form_class': forms.DateField} @@ -668,8 +673,13 @@ class DateTimeField(DateField): def flatten_data(self,follow, obj = None): val = self._get_val_from_obj(obj) date_field, time_field = self.get_manipulator_field_names('') - return {date_field: (val is not None and val.strftime("%Y-%m-%d") or ''), - time_field: (val is not None and val.strftime("%H:%M:%S") or '')} + if val is None: + date_data = time_data = '' + else: + d = datetime_safe.new_datetime(val) + date_data = d.strftime('%Y-%m-%d') + time_data = d.strftime('%H:%M:%S') + return {date_field: date_data, time_field: time_data} def formfield(self, **kwargs): defaults = {'form_class': forms.DateTimeField} diff --git a/django/db/models/manipulators.py b/django/db/models/manipulators.py index e0085d13ff..2d953260fb 100644 --- a/django/db/models/manipulators.py +++ b/django/db/models/manipulators.py @@ -9,6 +9,7 @@ from django.utils.datastructures import DotExpandedDict from django.utils.text import capfirst from django.utils.encoding import smart_str from django.utils.translation import ugettext as _ +from django.utils import datetime_safe def add_manipulators(sender): cls = sender @@ -332,5 +333,6 @@ def manipulator_validator_unique_for_date(from_field, date_field, opts, lookup_t pass else: format_string = (lookup_type == 'date') and '%B %d, %Y' or '%B %Y' + date_val = datetime_safe.new_datetime(date_val) raise validators.ValidationError, "Please enter a different %s. The one you entered is already being used for %s." % \ (from_field.verbose_name, date_val.strftime(format_string)) |
