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