Yeah, you'll definitely want to find some aggregate to do the sorting.
The only way to sort by a custom method is doing an in-python sort,
which is going to be much slower than having the db sort for you. If
you post the score models, we could probably help more.

Alex

On Feb 9, 8:49 am, "Casey S. Greene" <csgre...@princeton.edu> wrote:
> I haven't used django-voting but it sounds to me like you want something
> like:
> Link.objects.aggregate(Avg(score = 'vote__score')).order_by('score')
>
> If I recall correctly you can chain aggregate and order_by.
>
> Anyway, that example and this link should get you started at 
> least:http://docs.djangoproject.com/en/dev/topics/db/aggregation/
>
> Hope this helps!
> Casey
>
>
>
>
>
>
>
> On Wed, 2011-02-09 at 10:08 +0100, Andres Lucena wrote:
> > On Tue, Feb 8, 2011 at 6:00 PM, Andres Lucena <andresluc...@gmail.com> 
> > wrote:
> > > Dear Gurus,
>
> > > I've made a custom method for getting the score (from django-voting)
> > > for a giving Model:
>
> > > class Link(models.Model):
> > >    episode = models.ForeignKey("Episode", related_name="links")
> > >    url = models.CharField(max_length=255, unique=True, db_index=True)
>
> > >    def __unicode__(self):
> > >        return self.url
>
> > >    def get_score(self):
> > >        return Vote.objects.get_score(self)['score']
>
> > > Now I want to make a custom manager to getting the top-scored links
> > > for the given episode. AFAIK, you can't sort by a custom method, so
> > > I'm trying to apply the ordering through sorted(), like this links
> > > says:
>
> > >http://stackoverflow.com/questions/981375/using-a-django-custom-model...
> > >http://stackoverflow.com/questions/883575/custom-ordering-in-django
>
> > > So, what I have now is this:
>
> > > class LinkGetTopScores(models.Manager):
> > >    def get_top_score(self):
> > >        return sorted(self.filter(episode=self.episode), key=lambda n:
> > > n.get_score)
>
> > > class Link(models.Model):
> > >    episode = models.ForeignKey("Episode", related_name="links")
> > >    url = models.CharField(max_length=255, unique=True, db_index=True)
> > >    get_top_score = LinkGetTopScores()
> > > ....
>
> > > So of course this isn't working because of the self.episode stuff...
> > > But I've to filter somehow by episode (the ForeignKey), and I don't
> > > know how. Is there anyway of doing this?? What I'm doing is right or
> > > there would be an easier way of doing this?
>
> > I noticed that the .filter isn't necesary, so now I have this:
>
> > class LinkGetTopScores(models.Manager):
> >     def get_top_score(self):
> >         return sorted(self.all(), key=lambda n: n.get_score)
>
> > But it don't sort by score, and I don't know what I'm doing wrong :S
>
> > Any idea?
>
> > Thanks,
> > Andres
>
> > > Thank you,
> > > Andres

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