Django сумма определенного поля для некоторого отдельного столбца

У меня есть таблица OrderTransaction, которая имеет внешний ключ для таблицы Order. Я хочу вычислить неоплаченную сумму, т.е. сумму, для которой транзакция еще не произошла. Для этого мне сначала нужно вычислить общую сумму (в таблице Order есть поле total amount), чтобы потом вычесть из нее сумму прошедшей транзакции. Я группирую запрос по полю recorded_by, потому что мне нужно знать, какой продавец сколько собрал. Ниже приведен мой запрос.

order_transaction_qs
.exclude(recorded_by=None)
.order_by("recorded_by")
.values("recorded_by")
.annotate(
    cash_in_hand=Coalesce(
        Sum("amount", filter=Q(payment_method=PaymentMethod.CASH_ON_DELIVERY)), Value(0)
    ),
    cheque=Coalesce(
        Sum("amount", filter=Q(payment_method=PaymentMethod.CHEQUE)), Value(0)
    ),
    others=Coalesce(
        Sum(
            "amount",
            filter=~Q(
                payment_method__in=[
                    PaymentMethod.CHEQUE,
                    PaymentMethod.CASH_ON_DELIVERY,
                ]
            ),
        ),
        Value(0),
    ),
    order_amount=Sum(
        "order__total_amount"
    ),  # NOTE: Multiple transactions on same orders will give extra amount.
    outstanding=ExpressionWrapper(
        F("order_amount") - (F("cash_in_hand") + F("cheque") + F("others")),
        output_field=FloatField(),
    ),
)

Проблема с вышеуказанным запросом заключается в том, что если есть несколько транзакций для одного и того же заказа, он добавляет общую_сумму несколько раз. Пожалуйста, подскажите, что делать.

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