diff options
| author | Alex Gaynor <alex.gaynor@gmail.com> | 2010-11-04 16:03:05 +0000 |
|---|---|---|
| committer | Alex Gaynor <alex.gaynor@gmail.com> | 2010-11-04 16:03:05 +0000 |
| commit | abaa3ed4bd0c010c30aa338713a56b5c2cb45cf7 (patch) | |
| tree | d4f2285468b8b30ced1ad7b3163a4097c44dc466 /django/db/models/sql | |
| parent | 127506aeacc09f07e8e6b7c694423579f9663371 (diff) | |
Fixed #13935, added support for using QuerySet.dates across related fields. Thanks to valyagolev for his work on the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14461 bcc190cf-cafb-0310-a4f2-bffc1f526a37
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 |
