Brilliant! Это дает точный результат, который я хотел. Нет больше повторяющихся запросов :)

я есть следующие две модели.

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.

Как мне этого добиться?

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос