Почему Sum считается неверно?

qs - QuerySet из нескольких объектов. Мне нужно выполнить для него ряд фильтраций.

if min_qty:
    qs = qs.filter(stocks__count__gte=min_qty)

qs = qs.annotate(all_qty=Sum('stocks__count'))

print(sum([stock.count for stock in qs.first().stocks.all()]))
print(qs.first().all_qty)

Я ожидаю, что результат первого и второго принта здесь будет всегда одинаковый, т.к. и в первом и во-втором случая я хочу вывести сумму наличия на всех складах. И если не выполяется условие в блоке if - это действительно так. Но как только появляется min_qty и выполняется условие в блоке if, принты выдают разные цифры. Я не понимаю как это происходит и как этот иф вообще может влиять на то, что происходит дальше. Что я делаю не так?

Значение меняется именно при расчете Sum. Первый принт выдает всегда одно и то же.


Ответы (1 шт):

Автор решения: fz-79 Ivanov

Скорее всего это из-за annotate - у тебя в qs есть групировка и в sum([]) в цикле, ты считаешь все элементы, а когда выводишь all_qty, то берешь количество только первого элемента, поэтому и не совпадает. Посмотри сам sql запрос, он выводится через qs.query

→ Ссылка