如何在Django中为一个对象计算多个字段的值?

时间:2020-08-24 06:25:47

标签: python sql django aggregation

实际上,我坚持一件事。我学到很多东西,但是我需要你的帮助...

Django模型

from django.db import models

# Create your models here.

class Car(models.Model):
    mark = models.CharField(max_length=180)
    model = models.CharField(max_length=180, unique=True)

    def __str__(self):
        return "Car mark : {} Car model {}".format(self.id,self.model)
    

class Rate(models.Model):
    class Ratings(models.IntegerChoices):
        One = 1 
        Two = 2
        Three = 3
        Four = 4
        Five = 5
    
    grade = models.IntegerField(choices=Ratings.choices)
    car = models.ForeignKey(Car, on_delete=models.CASCADE,blank=True, null=True, related_name='rates')

首先-我想获取分配给一个对象的比率的平均值。 其次,我想计算每个对象的汇率。

2 个答案:

答案 0 :(得分:3)

简单,尝试这样:

from django.db.models import Avg, Count

Car.objects.annotate(rate_count=Count('rates'), avg_rate=Avg('rates__grade')).values()

更多信息,请访问documentation

答案 1 :(得分:0)

我不是Django方面的专家,但是查看了模型后,我希望像下面这样的东西可以工作

number_of_rates = len(car.rates)
average = sum([rate.grade for rate in car.rates]) / len(car.rates)