2014-01-31 15 views
0
class sales_line(models.Model): 
    sales_id = models.CharField(max_length=200) 
    item = models.CharField(max_length=200) 
    qty = models.IntegerField() 

    def __unicode__(self): 
     return self.sales_id 


class Loss(models.Models): 
    sale_id = models.ForeignKey(sales_line) 

我怎么能知道多少量丢失 如果sales_id是在损失表获取外键属性的总和,然后出售丢失使用Django

回答

2

您需要使用Sumaggregates

from django.db.models import Sum 
lost_sales_id = Loss.objects.all().values_list('sale_id__sales_id', flat=True) 
total = sales_line.objects.filter(sales_id__in=lost_sales_id).annotate(Sum('qty')) 

你真的需要优化你的模型:

class SalesLine(models.Model): 
    sales_id = models.CharField(max_length=200) 
    item = models.CharField(max_length=200) 
    qty = models.IntegerField() 

    def __unicode__(self): 
     return unicode(self.sales_id) 

class Loss(models.Model): 
    sale = models.ForeignKey(SalesLine) 

现在您可以执行此操作:

lost_sales_id = Loss.objects.all().values_list('sale__pk', flat=True) 
SalesLine.objects.filter(pk__in=lost_sales_id).annotate(Sum('qty')) 
+0

为什么不直接在过滤器中传递'Loss.objects.all()'queryset? – Exelian

+0

因为这将返回一个“Loss”对象列表。 –

+0

我不能在这里使用'聚合'而不是'注释'。它会返回'qty'的总和。 – rakesh