Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:从queryset块返回element.id和min(element.price)的列表/元组_Python_Django - Fatal编程技术网

Python Django:从queryset块返回element.id和min(element.price)的列表/元组

Python Django:从queryset块返回element.id和min(element.price)的列表/元组,python,django,Python,Django,我有一个cart\u详细信息视图,用于提供3x2折扣 因此,我正在从我的queryset中的每个元素中生成3个元素的块 使用: def chunks(lst, n): """Yield successive n-sized chunks from lst.""" for i in range(0, len(lst), n): yield lst[i:i + n] pack_items = PackItem.objects.filter(cart=cart) p

我有一个
cart\u详细信息
视图,用于提供
3x2
折扣

因此,我正在从我的
queryset
中的每个元素中生成3个元素的

使用:

def chunks(lst, n):
    """Yield successive n-sized chunks from lst."""
    for i in range(0, len(lst), n):
        yield lst[i:i + n] 
pack_items = PackItem.objects.filter(cart=cart)
pack_items_grouped_by_3 = chunks(pack_items, 3)
查询集和生成的块:

def chunks(lst, n):
    """Yield successive n-sized chunks from lst."""
    for i in range(0, len(lst), n):
        yield lst[i:i + n] 
pack_items = PackItem.objects.filter(cart=cart)
pack_items_grouped_by_3 = chunks(pack_items, 3)
现在,从每个块中,我需要返回一个带有min的列表或元组 所有3个元素的价格以及具有
min
price的元素ID

我可以返回每个区块的最低价格,但是如何从具有最低价格的区块返回包装ID?

for e in pack_items_grouped_by_3:
    product_with_min_price = min(pack.pack.price for pack in e)
    #product_id = e.index(min(pack.pack.price for pack in e))
    #print(product_id)
错误:在上面的for循环中,我尝试了:

product_id = e.index(min(pack.pack.price for pack in e))
print(product_id)
但埃罗说:

ValueError at /carrito_de_compras/
10 is not in list

10是每个区块的最小值,在这种情况下,可能在未来两个项目的价格为10,一个项目的价格为8,8将是最小价格。

根据您计划如何使用区块,始终根据价格对其进行排序可能是有意义的。然后你可以只拿第一个项目。

根据你计划如何使用这些区块,总是根据价格对它们进行排序可能是有意义的。然后您可以只获取第一项。

获取一个键函数,因此一种方法就是

product_with_min_price = min(e, key=lambda pack: pack.pack.price)
顺便说一句,我将在queryset上评测您的chunker-Django queryset使用数据库级偏移和限制操作实现切片,因此它可能会为每个块发出一个新的db查询。在这里,您可能会从在分块之前将queryset作为列表进行评估中获益。

需要一个键函数,因此一种方法就是

product_with_min_price = min(e, key=lambda pack: pack.pack.price)

顺便说一句,我将在queryset上评测您的chunker-Django queryset使用数据库级偏移和限制操作实现切片,因此它可能会为每个块发出一个新的db查询。在这里,您可能会受益于在分块之前将查询集作为列表进行评估。

我刚才在想这个问题。但仍然需要一种方法来拉最低价格和元素id。我只是在想这个。但是仍然需要一种方法来提取最小价格和元素id。如果有效,它将返回whe对象的最小价格,这样我就可以使用:
product\u with\u min\u price.price
访问它的价格。您是否可以详细介绍如何在queryset上分析chunker?或与此主题相关的任何链接。对于基础知识-要确认我关于多个查询的理论,您可以确保您在调试模式下运行,然后检查连接对象,如图所示:-或者在过去,我使用了第三方调试工具栏,例如Works,它返回whe对象的最小价格,因此我可以使用:
product_with_min_price.price
。您是否可以详细介绍如何在queryset上分析chunker?或与此主题相关的任何链接。对于基础知识-为了确认我关于多个查询的理论,您可以确保您在调试模式下运行,然后检查连接对象,如图所示:-或者在过去我使用了第三方调试工具栏,例如,您可以对整个查询结果进行排序吗?那么在chunk中获得min元素(显然是第一个)@Dos有趣的逻辑就更容易了。在这种情况下,如何按
price
对查询集进行排序?您只需在分块之前对查询集进行排序:pack\u items=PackItem.objects.filter(cart=cart)。order\u by('pack\u price')您能对整个查询结果进行排序吗?那么,在区块中获得min元素(显然是第一个)@Dos有趣的逻辑就更容易了,在这种情况下,如何按
price
对查询集进行排序?您可以在区块划分之前对查询集进行排序:pack\u items=PackItem.objects.filter(cart=cart)。order\u by('pack\u price'))