SQL databases are cool. Make them do as much as they can for you. :-) Philippe Niquille wrote: > Tanks a mill! > > I don't know why I searched so far.. > > Anyway, I wrapped the django custom SQL call and built a nice > dictionary out of the resulting rows (which is similar to querysets). > See http://www.djangosnippets.org/snippets/207/ > <http://www.djangosnippets.org/snippets/207/> for details. > > Philippe > > Am 23.07.2007 um 19:28 schrieb Eric Brunson: >> Philippe Niquille wrote: >>> >>> >>> Hi >>> >>> >>> >>> >>> I have a hard time sorting an object list. Perhaps this is kind of a >>> noob question, but I would very much appreciate any help! >>> >>> >>> >>> >>> Using django I get a QuerySet of Score objects which are sorted by >>> the actual score, the actual score divided by the max. possible >>> score (so sorting by two db fields). >>> >>> >>> I then need to loop through that queryset and sum up all the score >>> objects which belong to the same user into one Score objects. This >>> works (see code below). >>> >>> >>> >>> >>> The problem I now have, is that I lost the sorting order, as >>> described above. How would I resort it with a python algortithm >>> instead of SQL? >>> >>> >> >> >> This is not the question you're asking, but my first though was, why >> not have SQL do the summing for you using sum() and group by? >> >> >>> >>> >>> scores = Score.objects.order_by('score', 'score2','owner') # filter >>> by course, MC !! >>> >>> >>> # loop through scores to regroup by user >>> >>> >>> newscore = [] >>> >>> >>> for s in scores: >>> >>> >>> i = False >>> >>> >>> # loop through new object container and check for existant user >>> index, add scores if existant >>> >>> >>> for ns in newscore: >>> >>> >>> if s.owner == ns.owner: >>> >>> >>> ns.score = int(ns.score) + int(s.score) >>> >>> >>> ns.maxscore = int(ns.maxscore) + int(s.maxscore ) >>> >>> >>> i = True >>> >>> >>> # otherwise append new user index object, work with it later, >>> perhaps (if more user objects exist) >>> >>> >>> if i == False: >>> >>> >>> newscore.append(s) >>> >>> >>> >>> >>> ----------------- >>> >>> >>> >>> >>> I did fiddle around with .sort() but didn't get any useful results >>> (and it would only sort by one object..). >>> >>> >>> >>> >>> class CmpAttr: >>> >>> >>> def __init__(self, attr): >>> >>> >>> self.attr = attr >>> >>> >>> def __call__(self, x, y): >>> >>> >>> return cmp(getattr(x, self.attr), getattr(y, self.attr)) >>> >>> >>> >>> >>> newscore.sort(CmpAttr("score")) >>> >>> >>> >>> >>> >>> >>> ps. could it be, that this maillist is blocking some e-mail addresses? >>> >>> >>> ------------------------------------------------------------------------ >>> >>> >>> _______________________________________________ >>> Tutor maillist - Tutor@python.org <mailto:Tutor@python.org> >>> http://mail.python.org/mailman/listinfo/tutor >>> >> >> > >
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor