Нужно 2 значения для распаковки в цикле for; получено 1. в Django 3.0
После обновления проекта с Django 1.8 до Django 3.0 я столкнулся с проблемой "Need 2 values to unpack in for loop; got 1"
Давайте рассмотрим мой файл views.py следующим образом:
def add_items(request, pk, ot):
client = request.user.client
val1 = []
warehouse = [
(str(use.pk), use.name)
for use in WareHouse.objects.filter(client_id=client).
exclude(is_active=False)]
project = Project.objects.filter(client=request.user.client).exclude(is_deleted=True)
data1 = OtherOrder.objects.filter(id=pk)
if data1.exists() and (len(warehouse) == 1):
order = data1[0]
if order.warehouse is None:
try:
order.warehouse_id = warehouse[0][0]
order.save()
except BaseException as e:
logger.exception(e)
data = OtherOrderItem.objects.filter(other_order_id=pk)
total = data.aggregate(Sum('total_cost')).get('total_cost__sum') or 0.00
charges = OtherOrderAdditionalCharges.objects.filter(order_id=pk)
if charges.filter(charges_calculated=False):
flag = True
val = [i.id for i in data]
for j in val:
data3 = Movements.objects.values('other_order_item','damaged_quantity').filter(other_order_item=j, other_order_id=pk).annotate(Sum('quantity'))
val1.append(data3)
back = '/stock/other_orders/'
return render(request,'stock/add_items.html',locals())
Как я могу решить свой вопрос
Из документации:
render_to_response(template_name, context=None, content_type=None, status=None, using=None)
Deprecated since version 2.0.
This function preceded the introduction of render() and works similarly except that it doesn’t make the request available in the response.
https://docs.djangoproject.com/en/2.2/topics/http/shortcuts/#render
render_to_response()
был удален в Django 3.0 используйте render()
, так что в итоге ваш код будет выглядеть так
class StockPricingView(View):
def get(self, request, pk):
data1 = OtherOrder.objects.get(id=pk)
data = PricingModule.objects.filter(item__other_order_id=pk)
charges = OtherOrderAdditionalCharges.objects.filter(order_id=pk)
if charges.exists():
total_charges = charges.aggregate(Sum('amount')).get('amount__sum') or 0.00
order_total = data1.otherorderitem_set.all().aggregate(Sum('total_cost')).get('total_cost__sum') or 0.00
per_charges = (total_charges/order_total)*100
return render(request, 'stock/otherorders/stock_pricing_view.html')
render()
функция принимает несколько аргументов, указанных в doc.