Monday, 15 August 2011

mysql - How can I calculate average scores from these entries in django? -



mysql - How can I calculate average scores from these entries in django? -

so have model:

class scoreshow(models.model): dancer = models.foreignkey(dancer) s1 = models.integerfield(max_length = 2) s2 = models.integerfield(max_length = 2) s3 = models.integerfield(max_length = 2) s4 = models.integerfield(max_length = 2) s5 = models.integerfield(max_length = 2) s6 = models.integerfield(max_length = 2) s7 = models.integerfield(max_length = 2) counter = models.integerfield(max_length = 2) stotal = models.integerfield(max_length = 3) field_1 = models.integerfield(max_length = 20, null=true, blank=true) field_2 = models.charfield(max_length = 20, null=true, blank=true) def __unicode__(self): homecoming str(self.dancer)

which fed info view form:

def scores(request): perf = dancer.objects.filter(perform=true) if request.method =='post': intpk = request.post.get("form") whendone = request.post.get("done") contestant =dancer.objects.get(pk=intpk) showcase = inlineformset_factory(dancer, scoreshow, = 1) form = showcase(instance=none) if whendone == "save": form = showcase(request.post, request.files, instance=contestant) if form.is_valid(): form.save() homecoming render_to_response("scores.html",locals(), context_instance = requestcontext(request))

it accepts numeric values 1 10 13 people. need calculate average of scores 13 people set in. 2 averages:

the average of 7 categories ex. average of s1, average of s2 &

the average of of s's added average of s1 total+ s2 total ... divided total entries. t

i avoid having submit score twice if thats possible. can help me this?

you can utilize aggregation feature calling:

from django.db.models import avg qs = scoreshow.objects.all() homecoming qs.aggregate(avg('s1'), avg('s2'), avg('s3'), avg('s4'), avg('s5'), avg('s6'),avg('s7'))

or little shorter:

qs = scoreshow.objects.all() homecoming qs.aggregate(*[avg('s%d' % i) in range(1, 8)])

to calculate average value of scores need combine aggregate annotate:

from django.db.models import avg, sum fields = ['s%d' % in range(1,8)] qs = scoreshow.objects.annotate(sall=sum('id', field='+'.join(fields))).all() homecoming qs.aggregate(avg('sall'))

to create sure nobody submits 2 scores add together unique=true dancer foreign key:

class scoreshow(models.model): dancer = models.foreignkey(dancer, unique=true)

mysql django django-forms

No comments:

Post a Comment