Commit d535edb9 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

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
parent 6d6fb392
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -568,6 +568,13 @@ class DateField(Field):
        else:
            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):
        # Casts dates into the format expected by the backend
        return connection.ops.value_to_db_date(self.to_python(value))
+13 −5
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ u''
>>> len(a4.article_text)
5000

# #659 regression test
# Regression test for #659
>>> import datetime
>>> p = Party.objects.create(when = datetime.datetime(1999, 12, 31))
>>> p = Party.objects.create(when = datetime.datetime(1998, 12, 31))
@@ -71,6 +71,14 @@ u''
>>> [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)]

# Check that get_next_by_FIELD and get_previous_by_FIELD don't crash when we
# have usecs values stored on the database
#