我有一个商品查询集。
我已经使用了itertools分组器将它们按3分组。
但是,当列表包含3个以上的多个元素(例如7个元素)时,最后一个元组将以None
完成。
我需要遍历所有组(包含3个元素),并对每个元素进行遍历:
-测试是否不为空。
-比较组内每个元素的价格,并以较低的价格及其价格返回该元素的ID。
views.py:
查询集:
pack_items = PackItem.objects.filter(cart=cart)
按3分组:
pack_items_grouped_by_3 = list(grouper(pack_items, 3))
for p_item in pack_items_grouped_by_3:
print(type(p_item)) #prints <class 'tuple'>
print(p_item) #prints (<PackItem: PackItem object (65)>, <PackItem: PackItem object (66)>, <PackItem: PackItem object (67)>)
for a, b, c in p_item:
if a is not None:
print(a)
#print(a.pack.price)
elif b is not None:
print(b)
#print(b.pack.price)
elif c is not None:
print(c)
#print(c.pack.price)
错误:
对于p_item中的a,b,c:TypeError:无法解包不可迭代的PackItem 对象
答案 0 :(得分:0)
正在运行的是
for element in p_item:
element
将是p_item元组中的三个包装项目实例。引发错误是因为它试图将单个PackItem实例拆分为a, b, c
。
您可以执行以下任一操作:
a, b, c = p_item
或者我认为更好的是
pack_items_grouped_by_3 = list(grouper(pack_items, 3))
for a, b, c in pack_items_grouped_by_3:
if a is not None:
print(a)
#print(a.pack.price)
elif b is not None:
print(b)
#print(b.pack.price)
elif c is not None:
print(c)
#print(c.pack.price)