【发布时间】:2018-01-12 09:33:08
【问题描述】:
我有以下两种型号。
class Product(models.Model):
product_group=models.ForeignKey('productgroup.ProductGroup', null=False,blank=False)
manufacturer=models.ForeignKey(Manufacturer, null=False,blank=False)
opening_stock=models.PositiveIntegerField(default=0)
class Meta:
unique_together = ('product_group', 'manufacturer')
和
TRANSACTION_TYPE=(('I','Stock In'),('O','Stock Out'))
class Stock(models.Model):
product=models.ForeignKey('product.Product', blank=False,null=False)
date=models.DateField(blank=False, null=False,)
quantity=models.PositiveIntegerField(blank=False, null=False)
ttype=models.CharField(max_length=1,verbose_name="Transaction type",choices=TRANSACTION_TYPE, blank=False)
我需要列出所有带有 stock_in_sum=Sum(of all stock ins) 、 stock_out_sum=Sum(of all stock outs) 和 blance_stock=opening_stock+stock_in_sum - stock_out_sum 的产品
这是我目前所取得的成就。
class ProductList(ListView):
model=Product
def get_queryset(self):
queryset = super(ProductList, self).get_queryset()
queryset = queryset.prefetch_related('product_group','product_group__category','manufacturer')
queryset = queryset.annotate(stock_in_sum = Sum('stock__quantity'))
queryset = queryset.annotate(stock_out_sum = Sum('stock__quantity'))
我需要得到
-
stock_in_sum作为sum(quantity) where ttype='I' -
stock_out_sum作为sum(quantity) where ttype='O' -
blance_stock为product.opening_stock + stock_in_sum - stock_out_sum
连同每个 Product 对象。
我如何做到这一点?
谢谢。
【问题讨论】:
标签: django listview django-annotate