首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django平均模型输入

Django平均模型输入
EN

Stack Overflow用户
提问于 2020-05-22 04:09:55
回答 1查看 25关注 0票数 0

我能够在我的models.py中看到模型输入的帮助,教育学和易用性的平均值。然而,我也想取这三个评级的平均值,并将其命名为“总体”。我如何在Django中做到这一点?

models.py:

代码语言:javascript
复制
from django.db import models
from django.db.models import Avg

class Prof(models.Model):
    name = models.CharField(max_length=100, unique=True)
    association = models.CharField(max_length=50)

    def avg_ratings(self):
        return self.ratings.aggregate(
            Avg('helpfulness'),
            Avg('pedagogy'),
            Avg('easiness'),
        )

    def __str__(self):
        return self.name

class Rating(models.Model):
    helpfulness_choices = (
        (1, 'Very Unhelpful'),
        (2, 'Unhelpful'),
        (3, 'Moderate'),
        (4, 'Helpful'),
        (5, 'Very Helpful'),
    )

    pedagogy_choices = (
        (1, 'Very Low Pedagogy'),
        (2, 'Low Pedagogy'),
        (3, 'Moderate'),
        (4, 'High Pedagogy'),
        (5, 'Very High Pedagogy'),
    )

    easiness_choices = {
        (1, 'Very Difficult'),
        (2, 'Difficult'),
        (3, 'Moderate'),
        (4, 'Easy'),
        (5, 'Very Easy'),
    }

    name = models.ForeignKey(Prof, on_delete=models.CASCADE, related_name="ratings")
    subject = models.CharField(max_length=10)
    helpfulness = models.IntegerField(choices=helpfulness_choices)
    pedagogy = models.IntegerField(choices=pedagogy_choices)
    easiness = models.IntegerField(choices=easiness_choices)
    comment = models.TextField()

    def __str__(self):
        return str(self.name)

模板:

代码语言:javascript
复制
{% with avg_ratings=prof.avg_ratings %}
    Helpfulness: {{ avg_ratings.helpfulness__avg }} <br>
    Pedagogy: {{ avg_ratings.pedagogy__avg }} <br> 
    Easiness: {{ avg_ratings.easiness__avg }}
{% endwith %}
EN

回答 1

Stack Overflow用户

发布于 2020-05-22 04:19:11

代码语言:javascript
复制
return self.ratings.annotate(
            help_avg=Avg('helpfulness'),
            ped_avg = Avg('pedagogy'),
            ease_avg = Avg('easiness'),
        ).annotate(overall=(F('help_avg')+F('ped_avg')+F('ease_avg'))/3).values('help_avg','ped_avg','ease_avg','overall')

我认为?也许吧?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61943038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档