Django:为循环打开元组

时间:2019-12-09 15:40:59

标签: python django itertools

我有一个商品查询集。

我已经使用了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   对象

1 个答案:

答案 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)