diff --git a/django/db/backends/postgresql/operations.py b/django/db/backends/postgresql/operations.py index 14bd976d8b..35824609b2 100644 --- a/django/db/backends/postgresql/operations.py +++ b/django/db/backends/postgresql/operations.py @@ -27,9 +27,8 @@ class DatabaseOperations(BaseDatabaseOperations): def date_extract_sql(self, lookup_type, field_name): # http://www.postgresql.org/docs/8.0/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT if lookup_type == 'week_day': - # Using EXTRACT(), PostgreSQL days are indexed as Sunday=0, Saturday=6. - # If we instead us TO_CHAR, they're indexed with Sunday=1, Saturday=7 - return "TO_CHAR(%s, 'D')" % field_name + # For consistency across backends, we return Sunday=1, Saturday=7. + return "EXTRACT('dow' FROM %s) + 1" % field_name else: return "EXTRACT('%s' FROM %s)" % (lookup_type, field_name) diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index 8a4c072896..f9be87d00a 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -211,9 +211,9 @@ def _sqlite_extract(lookup_type, dt): except (ValueError, TypeError): return None if lookup_type == 'week_day': - return unicode((dt.isoweekday() % 7) + 1) + return (dt.isoweekday() % 7) + 1 else: - return unicode(getattr(dt, lookup_type)) + return getattr(dt, lookup_type) def _sqlite_date_trunc(lookup_type, dt): try: diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 0c9aa59425..f580384b80 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -500,10 +500,10 @@ class DateField(Field): curry(cls._get_next_or_previous_by_FIELD, field=self, is_next=False)) def get_db_prep_lookup(self, lookup_type, value): - # For "__month", "__day", and "__week_day" lookups, convert the value - # to a string so the database backend always sees a consistent type. + # For "__month", "__day", and "__week_day" lookups, convert the value + # to an int so the database backend always sees a consistent type. if lookup_type in ('month', 'day', 'week_day'): - return [force_unicode(value)] + return [int(value)] return super(DateField, self).get_db_prep_lookup(lookup_type, value) def get_db_prep_value(self, value):