On Tue, Apr 14, 2009 at 10:50 AM, veearrsix <stup...@googlemail.com> wrote:
> > Thanks for the help so far guys, I've used that recipe suggested by > Malcolm, where by I pass a number of querysets into the method. It > works as expected I guess, BUT, I would like to be able to sort by the > datetime field from each queryset, however the fieldnames for each of > the date time fields from each queryset are different. Is there a way > around this, should I actually be looking at a custom sql query? > > On Apr 11, 12:55 am, Alex Gaynor <alex.gay...@gmail.com> wrote: > > On Fri, Apr 10, 2009 at 7:52 PM, Malcolm Tredinnick < > > > > > > > > malc...@pointy-stick.com> wrote: > > > > > On Fri, 2009-04-10 at 19:44 -0400, Alex Gaynor wrote: > > > > > > On Fri, Apr 10, 2009 at 7:40 PM, Malcolm Tredinnick > > > > <malc...@pointy-stick.com> wrote: > > > [...] > > > > > > Particularly with iterators, storing the (next head item, > rest > > > > of > > > > iterator) pair in a heap leads to a very neat and fast way to > > > > create a > > > > combined iterator. Here's one professional-quality > > > > implementation that I > > > > would recommend:http://code.activestate.com/recipes/491285/ > > > > > > It has one unfortunate failing(which is the fault of the heapq > > > > library), it doesn't take a key/cmp function like sorted does. It is > > > > otherwise completely excellent though. > > > > > It's Python and so is the heap module! Modifying things is easy. I've > > > used the same solution with custom comparison functions one a number of > > > occasions. Even writing a small heap implementaiton with a custom > > > comparison is only about two dozen lines. Come on, think a little bit > > > outside the box! > > > > I'm not! A heap sort is a great solution to this problem(but you already > > knew that), it's just that the implementation in the python stdlib > doesn't > > work perfectly for this usecase(indeed I filed a ticket about this > upsteam > > several months ago, for reference it was rejected). I did the same thing > > you suggested for a blog post on this topic a number of months ago, > however > > it wasn't nearly as optimial as this(I believe you even commented to that > > effect on the post). > > > > > > > > > Regards, > > > Malcolm > > > > 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 > > > Well, if you use some sorting mechanism that takes a key function(like the one sorted takes) you could write one up that's something like: DATE_FIELD_MAPPING = { Model1: 'date', Model2: 'pubdate', } def my_key_func(obj): return getattr(obj, DATE_FIELD_MAPPING[type(obj)]) And then sorted(chain(Model1.objects.all(), Model2.objects.all()), key=my_key_func) Or something similar using the heap sort method malcolm and I discussed. 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 django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---