Django queryset .iterate(): не работает. Учитывается только первый элемент, второй игнорируется

У меня есть следующий код. Я знаю, что queryset содержит 2 элемента. Однако Django создает только одну запись. Что я упускаю из виду?

Я знаю, что "OrderItem.objects.filter(order=order)" возвращает два объекта. Однако в order_lines.iterate() создается только одна запись. Я что-то упустил из виду?

            order_lines = OrderItem.objects.filter(order=order)
            inv_ref = (str(order.order_date.year) + "-" + str(10000+order.id))
            inv = Invoice.objects.create(invoice_ref=inv_ref,date=order.order_date, order=order, ship_to=order.order_ship_to, bill_to=order.order_bill_to)
            
            value = 0
            vat = 0
            total = 0
            commission = 0


            ## Looping not working properly: fix all items to be added to invoice.
            for item in order_lines.iterator():
                exvat = (item.price/((100+item.vat)/100))
                val = item.quantity * exvat
                ttl = (item.price*item.quantity)
                comm = item.commission
                vat_val = ttl-val
                
                InvoiceItems.objects.create(invoice=inv, order_item=item, quantity=item.quantity, price=exvat, value=val, vat=item.vat,vat_val=vat_val,total=ttl)
                value = value + val
                vat = vat + vat_val
                total = total + ttl
                commission = commission + comm
                print(item)

Попробуйте упрощенный цикл:

for item in order_lines:

он должен работать как шарм, потому что это уже QuerySet объект.

Не используйте .iterator(), так как django.models.Model.objects.filter() уже возвращает QuerySet, который реализует протокол итератора (Iterable[]).

...
for item in order_lines:
    ...
...
Вернуться на верх