簡體   English   中英

Django 平均模型輸入

[英]Django averaging models inputs

我可以在我的 models.py 中看到 model 輸入有用性、教學法和易用性的平均值。 但是,我也想取這三個評分的平均值,並將其命名為“整體”。 如何在 Django 中執行此操作?

模型.py:

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)

模板:

{% with avg_ratings=prof.avg_ratings %}
    Helpfulness: {{ avg_ratings.helpfulness__avg }} <br>
    Pedagogy: {{ avg_ratings.pedagogy__avg }} <br> 
    Easiness: {{ avg_ratings.easiness__avg }}
{% endwith %}
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')

我認為? 也許?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM