Fixed #8510 -- Allow both strings (mostly for the admin) and integers to be
used in "month" and "day" filters on date/datetime fields. Without this commit, SQLite behaved inconsistently after [8494]. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8526 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
6d6fb392b4
commit
d535edb9da
|
@ -568,6 +568,13 @@ class DateField(Field):
|
||||||
else:
|
else:
|
||||||
return self.editable or self.auto_now or self.auto_now_add
|
return self.editable or self.auto_now or self.auto_now_add
|
||||||
|
|
||||||
|
def get_db_prep_lookup(self, lookup_type, value):
|
||||||
|
# For "__month" and "__day" lookups, convert the value to a string so
|
||||||
|
# the database backend always sees a consistent type.
|
||||||
|
if lookup_type in ('month', 'day'):
|
||||||
|
return [force_unicode(value)]
|
||||||
|
return super(DateField, self).get_db_prep_lookup(lookup_type, value)
|
||||||
|
|
||||||
def get_db_prep_value(self, value):
|
def get_db_prep_value(self, value):
|
||||||
# Casts dates into the format expected by the backend
|
# Casts dates into the format expected by the backend
|
||||||
return connection.ops.value_to_db_date(self.to_python(value))
|
return connection.ops.value_to_db_date(self.to_python(value))
|
||||||
|
|
|
@ -57,18 +57,26 @@ u''
|
||||||
>>> len(a4.article_text)
|
>>> len(a4.article_text)
|
||||||
5000
|
5000
|
||||||
|
|
||||||
# #659 regression test
|
# Regression test for #659
|
||||||
>>> import datetime
|
>>> import datetime
|
||||||
>>> p = Party.objects.create(when = datetime.datetime(1999, 12, 31))
|
>>> p = Party.objects.create(when = datetime.datetime(1999, 12, 31))
|
||||||
>>> p = Party.objects.create(when = datetime.datetime(1998, 12, 31))
|
>>> p = Party.objects.create(when = datetime.datetime(1998, 12, 31))
|
||||||
>>> p = Party.objects.create(when = datetime.datetime(1999, 1, 1))
|
>>> p = Party.objects.create(when = datetime.datetime(1999, 1, 1))
|
||||||
>>> [p.when for p in Party.objects.filter(when__month = 2)]
|
>>> [p.when for p in Party.objects.filter(when__month=2)]
|
||||||
[]
|
[]
|
||||||
>>> [p.when for p in Party.objects.filter(when__month = 1)]
|
>>> [p.when for p in Party.objects.filter(when__month=1)]
|
||||||
[datetime.date(1999, 1, 1)]
|
[datetime.date(1999, 1, 1)]
|
||||||
>>> [p.when for p in Party.objects.filter(when__month = 12)]
|
>>> [p.when for p in Party.objects.filter(when__month=12)]
|
||||||
[datetime.date(1999, 12, 31), datetime.date(1998, 12, 31)]
|
[datetime.date(1999, 12, 31), datetime.date(1998, 12, 31)]
|
||||||
>>> [p.when for p in Party.objects.filter(when__year = 1998)]
|
>>> [p.when for p in Party.objects.filter(when__year=1998)]
|
||||||
|
[datetime.date(1998, 12, 31)]
|
||||||
|
|
||||||
|
# Regression test for #8510
|
||||||
|
>>> [p.when for p in Party.objects.filter(when__day='31')]
|
||||||
|
[datetime.date(1999, 12, 31), datetime.date(1998, 12, 31)]
|
||||||
|
>>> [p.when for p in Party.objects.filter(when__month='12')]
|
||||||
|
[datetime.date(1999, 12, 31), datetime.date(1998, 12, 31)]
|
||||||
|
>>> [p.when for p in Party.objects.filter(when__year='1998')]
|
||||||
[datetime.date(1998, 12, 31)]
|
[datetime.date(1998, 12, 31)]
|
||||||
|
|
||||||
# Check that get_next_by_FIELD and get_previous_by_FIELD don't crash when we
|
# Check that get_next_by_FIELD and get_previous_by_FIELD don't crash when we
|
||||||
|
|
Loading…
Reference in New Issue