【问题标题】:Calculating averages in django models在 django 模型中计算平均值
【发布时间】:2017-03-17 23:41:38
【问题描述】:

我需要找出客户订单的平均数量。我将如何使用 django 的模型来做到这一点?

from django.db import models

class Customer(models.Model):
    name = models.CharField(max_length=200)
    phone = models.CharField(max_length=17)
    average_quantity_size = ?

class Order(models.Model):
    customer = models.ForeignKey(Customer)
    quantity = models.PositiveSmallIntegerField()
    date = models.DateField()
    time = models.TimeField()

【问题讨论】:

    标签: python django python-3.x web


    【解决方案1】:

    这不是模型字段。它应该是一个属性。

    class Customer(models.Model):
        name = models.CharField(max_length=200)
        phone = models.CharField(max_length=17)
    
        @property
        def average_quantity_size(self):
            qty = self.order_set.values_list('quantity', flat=True)
            if not qty:
                return 0
            return sum(qty)/len(qty)
    

    反向查找可以在这里阅读:Lookups that span a relationship

    【讨论】:

    • 我收到此错误TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
    • 你在哪里做加法?肯定不是这段代码..请仔细看stacktrace
    • 我没有做加法,这和你发布的代码相同Traceback (most recent call last): File "<console>", line 1, in <module> File "C:\Users\Matthew\Desktop\mysite\polls\models.py", line 11, in average_quantity_size return sum(qty)/len(qty) TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
    【解决方案2】:

    也许Aggregation 可能会有所帮助。 它仍然是一个属性,但可能采用以下形式:

    @property
    def average_quantity_size(self):
        result = self.orders.aggregate(Avg('quantity'))
        return result
    

    但我强烈建议您查看上面链接的聚合文档以获得更清晰的图片。祝你好运。

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2013-01-14
      • 2023-03-28
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多