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

Reply via email to