Django

Code

Changeset 9091

Show
Ignore:
Timestamp:
09/27/08 23:36:10 (3 months ago)
Author:
mtredinnick
Message:

Fixed Queryset.dates() in the presence of extra-select columns.

Any extra(select=...) columns can be ignored in the SQL for dates, since we are
only interested in extracting distinct date values. We were previously
including them by accident and it was generating incorrect SQL.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/models/sql/subqueries.py

    r9008 r9091  
    395395        self.select_fields = [None] 
    396396        self.select_related = False # See #7097. 
     397        self.extra_select = {} 
    397398        self.distinct = True 
    398399        self.order_by = order == 'ASC' and [1] or [-1] 
  • django/trunk/tests/regressiontests/extra_regress/models.py

    r8930 r9091  
    11import copy 
     2import datetime 
    23 
    34from django.contrib.auth.models import User 
     
    1011    base = models.ForeignKey('self', null=True) 
    1112    title = models.CharField(blank=True, max_length=255) 
     13    when = models.DateTimeField(default=datetime.datetime.now) 
    1214 
    1315    def __unicode__(self): 
     
    3234# Regression tests for #7314 and #7372 
    3335 
    34 >>> rm = RevisionableModel.objects.create(title='First Revision'
     36>>> rm = RevisionableModel.objects.create(title='First Revision', when=datetime.datetime(2008, 9, 28, 10, 30, 0)
    3537>>> rm.pk, rm.base.pk 
    3638(1, 1) 
     
    3840>>> rm2 = rm.new_revision() 
    3941>>> rm2.title = "Second Revision" 
     42>>> rm.when = datetime.datetime(2008, 9, 28, 14, 25, 0) 
    4043>>> rm2.save() 
    4144>>> print u"%s of %s" % (rm2.title, rm2.base.title) 
     
    108111[<User: fred>] 
    109112 
     113# When calling the dates() method on a queryset with extra selection columns, 
     114# we can (and should) ignore those columns. They don't change the result and 
     115# cause incorrect SQL to be produced otherwise. 
     116>>> RevisionableModel.objects.extra(select={"the_answer": 'id'}).dates('when', 'month') 
     117[datetime.datetime(2008, 9, 1, 0, 0)] 
    110118"""}