Джанго выбрать отличную сумму - PullRequest
2 голосов
/ 20 марта 2010

У меня следующая (очень упрощенная) структура таблицы:

Order:
    order_number = CharField
    order_invoice_number = CharField
    order_invoice_value = CharField

Номер счета-фактуры может быть одинаковым для нескольких заказов (заказ O1 имеет номер счета I1, заказ O2 имеет номер счета I1 и т. Д.). Все заказы с одинаковым номером счета имеют одинаковое значение.

Например:

Order no.    Invoice no.    Value
O1           I1             200
O2           I1             200
O3           I1             200
04           I2             50
05           I3             100

То, что я пытаюсь сделать, это сделать сумму по всем значениям счета, но не добавляйте счета с одним и тем же номером более одного раза. Сумма по вышеуказанным пунктам составит: 200 + 50 + 100.

Я пытался сделать это, используя

s = orders.values('order_invoice_id').annotate(total=Sum('order_invoice_value')).order_by() 

и

s = orders.values('order_invoice_id').order_by().annotate(total=Sum('order_invoice_value'))

но я не получил желаемого результата. Я попробовал несколько разных решений из похожих вопросов, но не смог получить желаемый результат.

Я не могу понять, что я делаю неправильно, и что я должен делать, чтобы получить сумму, которая использует каждое значение счета-фактуры только один раз.

Edit:

Я только что понял, что в O5 я написал I2 вместо I3. Теперь все написано правильно.

Желаемым результатом для данных выше является сумма каждого значения счета, используемого только один раз. Сумма = I1 + I2 + I3 = 200 + 50 + 100 = 350

1 Ответ

1 голос
/ 20 марта 2010

Я бы сказал, что у вас неправильная структура модели. У вас должна быть одна таблица для заказа, содержащая номер и стоимость заказа, и отдельная связанная таблица для счетов-фактур с внешним ключом от счета-фактуры к заказу. Тогда ваш запрос будет простым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...