2017-03-17 144 views
-2

我需要找出客户订单的平均数量。我将如何使用django的模型来做到这一点?在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() 

回答

0

这不会是模型领域。它应该是一个财产。

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

+0

我得到这个错误TypeError:不支持的操作数类型为+:'int'和'tuple' – mynamejeef123

+0

你在做什么?绝对不是这样的代码。请仔细看看堆栈跟踪 – karthikr

+0

我没有做另外,这是你发布的相同代码'Traceback(最近调用最后一个): 文件“”,第1行,在 文件“C:\ Users \ Matthew \ Desktop \ mysite \ polls \ models.py”,第11行,在average_quantity_size中 return sum(qty)/ len(qty) TypeError:不支持的操作数类型为+:'int'和'元组' – mynamejeef123

0

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

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

但我强烈建议考虑看看上面链接以获得更清晰的画面上聚集的文档。祝你好运。