Mysql 如何计算django中这些条目的平均分数?

Mysql 如何计算django中这些条目的平均分数?,mysql,django,django-forms,Mysql,Django,Django Forms,所以我有这个模型: 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_le

所以我有这个模型:

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):
        return str(self.dancer) 
从该视图表单中输入信息:

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, extra = 1)
        form = showcase(instance=None)

        if whendone == "save":

            form = showcase(request.POST, request.FILES, instance=contestant)
            if form.is_valid():
                form.save()

     return render_to_response("scores.html",locals(), context_instance = RequestContext(request))
它接受大约13个人的1到10的数值。我需要计算13个人的平均得分。2平均数:

  • 7个类别的平均值,例如s1的平均值、s2的平均值&

  • 所有S的平均值加在一起,因此s1总计+s2总计的平均值。。。除以总条目。T

  • 如果可能的话,我也希望避免任何人提交两次分数。有人能帮我吗

  • 您可以通过以下方式使用:

    from django.db.models import Avg
    qs = ScoreShow.objects.all()
    return qs.aggregate(Avg('s1'), Avg('s2'), Avg('s3'), Avg('s4'), Avg('s5'), Avg('s6'),Avg('s7'))
    
    或者再短一点:

    qs = ScoreShow.objects.all()
    return qs.aggregate(*[Avg('s%d' % i) for i in range(1, 8)])
    
  • 要同时计算所有分数的平均值,您需要将“合计”与以下各项结合起来:

  • 要确保没有人提交两个分数,请向dancer外键添加
    unique=True

    class ScoreShow(models.Model):
        dancer = models.ForeignKey(dancer, unique=True)
    

  • 哇,谢谢,第一部分很好,但是对于总平均值,我一直得到这个错误:Sum'object没有属性'all',我用filter尝试过,我也得到了这个错误,有什么想法吗?再次感谢你我的错误,我忘记了一个结束括号。
    class ScoreShow(models.Model):
        dancer = models.ForeignKey(dancer, unique=True)