diff options
Diffstat (limited to 'django/db/models/sql')
| -rw-r--r-- | django/db/models/sql/subqueries.py | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/django/db/models/sql/subqueries.py b/django/db/models/sql/subqueries.py index a066dfeca8..932a4429ec 100644 --- a/django/db/models/sql/subqueries.py +++ b/django/db/models/sql/subqueries.py @@ -4,6 +4,7 @@ Query subclasses which provide extra functionality beyond simple data retrieval. from django.core.exceptions import FieldError from django.db import connections +from django.db.models.fields import DateField from django.db.models.sql.constants import * from django.db.models.sql.datastructures import Date from django.db.models.sql.expressions import SQLEvaluator @@ -184,12 +185,19 @@ class DateQuery(Query): compiler = 'SQLDateCompiler' - def add_date_select(self, field, lookup_type, order='ASC'): + def add_date_select(self, field_name, lookup_type, order='ASC'): """ Converts the query into a date extraction query. """ - result = self.setup_joins([field.name], self.get_meta(), - self.get_initial_alias(), False) + result = self.setup_joins( + field_name.split(LOOKUP_SEP), + self.get_meta(), + self.get_initial_alias(), + False + ) + field = result[0] + assert isinstance(field, DateField), "%r isn't a DateField." \ + % field.name alias = result[3][-1] select = Date((alias, field.column), lookup_type) self.select = [select] @@ -199,6 +207,9 @@ class DateQuery(Query): self.distinct = True self.order_by = order == 'ASC' and [1] or [-1] + if field.null: + self.add_filter(("%s__isnull" % field_name, False)) + class AggregateQuery(Query): """ An AggregateQuery takes another query as a parameter to the FROM |
