Как исключить аннотацию из групп по (значениям) вычисления - django
Я пытаюсь показать прибыль и убытки в запросе, который группируется по дате(TruncDay), вот что я пытаюсь реализовать
class CustomerInvoice(models.Model):
seller = models.ForeignKey(User,on_delete=models.CASCADE)
customer = models.CharField(max_length=50)
items_model = models.ManyToManyField(Item,through='InvoiceItem')
created_at = models.DateTimeField(auto_now_add=True)
class InvoiceItem(models.Model):
item = models.ForeignKey(Item,on_delete=models.CASCADE)
invoice = models.ForeignKey(CustomerInvoice,on_delete=models.CASCADE,related_name='invoice')
quantity = models.IntegerField()
price = models.DecimalField(max_digits=20,decimal_places=2)
class Item(models.Model):
item = models.CharField(max_length=40)
quantity = models.IntegerField()
buying_price = models.DecimalField(max_digits=30,decimal_places=2)
я хочу получить дневной доход, который является вычитанием между ценой из InvoiceItem
и ценой покупки из Item
если больше 0 это будет доход, но если цена покупки больше цены это должен быть убыток, но за весь день, иногда бывает в 10 счетах, у нас только один товар продан по цене покупки больше цены, я хочу посчитать его, показать эту сумму денег, но в группе по, в 10 счетах например доход в 9 счетах составляет : 100, но в других счетах, которые проданы, которые имеют цену покупки : 10, цена:9, он покажет доход 99, он ничего не показывает в loss
return InvoiceItem.objects.annotate(day=TruncDay('invoice__created_at')).values('day').annotate(
paid_price=Sum(
(F('price') * F('quantity')),output_field=DecimalField(max_digits=20,decimal_places=3)),
storage_price=Sum(
F('item__buying_price') * F('quantity'),output_field=DecimalField(max_digits=20,decimal_places=3)),
income=Case(
When(paid_price__gte=F('storage_price'),then=F('paid_price')-F('storage_price')),default=0,output_field=DecimalField(max_digits=20,decimal_places=3)),
).annotate(
loss=Case(
When(
storage_price__gt=F('paid_price'),then=F('storage_price') - F('paid_price')),default=0,output_field=DecimalField(max_digits=20,decimal_places=3)),
).order_by('-day')
но я не смог сделать это с помощью group by(values) есть ли способ достичь этого, пожалуйста? заранее спасибо ..