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