On Tue, Jun 16, 2009 at 11:48 AM, Andrew Durdin <[email protected]> wrote:

>
> Today I ran into an issue where using distinct() and values() on a
> queryset where the model had default ordering would return apparently
> non-distinct results.  After searching, I found
> http://code.djangoproject.com/ticket/9186
> which indicates that this is now correct behaviour.  It took me a long
> time to discover what was wrong, however, because the queryset's
> _as_sql() method didn't show the the extra field that the default
> ordering caused to be selected.  For example (expanding on the example
> in that ticket), if I call:
>
> {{{ PbxRecord.objects.values('extension').distinct()._as_sql() }}}
>
> I'd get back this sql:
>
> {{{ ('SELECT DISTINCT `datastore_pbxrecord`.`extension` FROM
> `datastore_pbxrecord`', ()) }}}
>
> And not the actual sql that will be executed when the queryset is
> evaluated:
>
> {{{ SELECT DISTINCT `datastore_pbxrecord`.`extension`,
> `datastore_pbxrecord`.`id` FROM `datastore_pbxrecord` ORDER BY
> `datastore_pbxrecord`.`id` ASC }}}
>
> Why does _as_sql() not return the actual sql that will be executed?
> Is there any way to obtain the real SQL that a queryset will use?
> Although I only use _as_sql() for debugging, it'd be nice to know that
> it is reliable.
>
> Andrew.
> >
>
Use QuerySet.query.as_sql().  QuerySet._as_sql() is exclusively for use with
__in filters so it gets limited to just the primary key.

Alex

-- 
"I disapprove of what you say, but I will defend to the death your right to
say it." --Voltaire
"The people's good is the highest law."--Cicero

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to