Подскажите, как правильно подсчитать количество товаров в таблице Django

В таблице хранятся наименование, цена, количество товара. Причем одно наименование может быть с разными ценами. Также есть поле "тип операции" (typedoc) для каждой строки. 1 - приход товара, 2 - начальный остаток, 3 - продажа за наличные, 4 - продажа через терминал и т.д. Я пытаюсь получить набор записей с наименованиями, ценой и количеством товара по этой цене. То есть количество = сумма начальных остатков(typedoc=1) + приход(typedoc=2) - продажи(typedoc=3,4) Мой код работает, но кажется очень медленно... Подскажите правильное решение, я только начинаю учить Django. Я делаю так: выбираю все записи из таблицы:

    data=DocJurnal.objects.order_by('title')

А затем в цикле получаю нужные значения:

       for good in data:
    name = good.title
    price=good.saleprice
    goodid = good.title.id
    category=good.title.category.title
    category_id=good.title.category.id
    prihod=DocJurnal.objects.filter(title=good.title).filter(typedoc=1).filter(saleprice=price).aggregate(Sum('volume'))
    ostatok = DocJurnal.objects.filter(title=good.title).filter(typedoc=2).filter(saleprice=price).aggregate(Sum('volume'))
    spisanie = DocJurnal.objects.filter(title=good.title).filter(typedoc=3).filter(saleprice=price).aggregate(Sum('volume'))
    cash=DocJurnal.objects.filter(title=good.title).filter(typedoc=4).filter(saleprice=price).aggregate(Sum('volume'))
    term = DocJurnal.objects.filter(title=good.title).filter(typedoc=5).filter(saleprice=price).aggregate(
        Sum('volume'))

rest=ostatok['volume__sum'] + prihod['volume__sum'] - spisanie['volume__sum'] - cash['volume__sum'] - term['volume__sum']

Код ужасный! Работает медленно. Подскажите правильный способ... В общем, мне надо получить такой набор данных - наименование, цена, количество с учетом проведенных операций. Если товар имеет одно наименование, но разные цены - количество по каждой цене. Спасибо!

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