> If I have a model that returns calculated fields, how would I sort a
> query set on them?
> 
> Assume the query sets are relatively small (< 100) for now.

Give this condition (a small set of data) and no need to slice
the results on the server based on this order, it can be done
purely in python.  If the data-set grows larger, it will be more
efficient to do some hacks to get this on the server side of
things.  However...assuming those conditions:

For the below example code, "foo_list" is a list of Foo objects
with an "x" and a "y" property.  For this example,
some_function() determines the magnitude-squared (x**2 + y**2)

>>> foo_list = list(Foo.objects.all())
>>> foo_list
[<Foo x=1, y=1>, <Foo x=4, y=9>, <Foo x=9, y=7>, <Foo x=10, y=2>,
<Foo x=2, y=9>, <Foo x=4, y=10>, <Foo x=5, y=7>, <Foo x=2, y=3>,
<Foo x=9, y=2>, <Foo x=2, y=3>]
>>> # sort them based on "x"
>>> foo_list.sort(cmp=lambda a,b: cmp(a.x, b.x))
>>> foo_list
[<Foo x=1, y=1>, <Foo x=2, y=9>, <Foo x=2, y=3>, <Foo x=2, y=3>,
<Foo x=4, y=9>, <Foo x=4, y=10>, <Foo x=5, y=7>, <Foo x=9, y=7>,
<Foo x=9, y=2>, <Foo x=10, y=2>]
>>> # sort them based on "y"
>>> foo_list.sort(cmp=lambda a,b: cmp(a.y, b.y))
>>> foo_list
[<Foo x=1, y=1>, <Foo x=9, y=2>, <Foo x=10, y=2>, <Foo x=2, y=3>,
<Foo x=2, y=3>, <Foo x=5, y=7>, <Foo x=9, y=7>, <Foo x=2, y=9>,
<Foo x=4, y=9>, <Foo x=4, y=10>]
>>> # sort it by the results of the some_function() call
>>> foo_list.sort(cmp=lambda a,b: cmp(a.some_function(),
b.some_function()))
>>> foo_list
[<Foo x=1, y=1>, <Foo x=2, y=3>, <Foo x=2, y=3>, <Foo x=5, y=7>,
<Foo x=9, y=2>, <Foo x=2, y=9>, <Foo x=4, y=9>, <Foo x=10, y=2>,
<Foo x=4, y=10>, <Foo x=9, y=7>]

Note that the Python sort() function
1) does the sort in-place and
2) does *not* return the results (returns None instead)

Hope this helps,

-tim



--~--~---------~--~----~------------~-------~--~----~
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