On Wed, 2008-07-09 at 05:51 -0700, [EMAIL PROTECTED] wrote:
[...]
> I tried using the order_by with two sets of dates:
> 
> .order_by('-related_name_to_model__date_field_in_B', '-
> date_field_in_A')
> 
> However, this just produces a queryset that is partitioned into two
> separate date orderings.
> 
> What I'm asking is if there is anyway to "intermix" the dates so that
> ALL of the Model As appear in date order, even if they do not have a
> related Model B date?

No, because ordering is done at the SQL level and Django converts that
ordering tuple to a sequence of ordering columns. What is happening here
(why the sets appear to be partitioned) is because all rows that don't
have a date field in B have a NULL in that column after the outer join.
All those NULLs sort together (whether they sort first or last is
database dependent) and then model A date field is used as a secondary
ordering to distinguish any rows that have sorted together for the "date
in B" columns (e.g. the NULLs).

If you were writing the raw SQL, you could do this with a coalesce
statement in the ordering clause. Right now that kind of stuff isn't
possible to insert directly via Django, although you could do it by
subclassing Query (and then QuerySet) if you were really keen. Adding a
way to have "smart" ordering objects (you pass in an object and Django
will call the as_sql() method on it, for example) will probably happen
at some point, but it's not high priority at the moment.

Regards,
Malcolm



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
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