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:
...
...