Как исключить аннотацию из групп по (значениям) вычисления - 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) есть ли способ достичь этого, пожалуйста? заранее спасибо ..

Вернуться на верх