Django:解压缩元组在循环中



我有一个项目的查询集。

我使用迭代工具石斑鱼将它们按 3 分组。

但是,当列表包含超过 3 个元组(例如 7 个 elemenets(时,最后一个元组以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) 

错误:

对于 a、b、c p_item:类型错误:无法解压缩不可迭代的 PackItem 对象

正在发生的事情是,当你运行

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) 

最新更新