Python 在Django的get_list_或_404中排序

Python 在Django的get_list_或_404中排序,python,django,django-orm,Python,Django,Django Orm,我正在Django中进行查询,该查询包含一个非任意顺序的产品ID数组,以及与这些ID对应的产品列表: product_ids= [109, 33, 76, 332, 112] products_inventory = get_list_or_404(Products, id__in=product_ids) 查询工作正常。但是,products_inventory与product_id定义的元素没有相同的顺序(即products_inventory中的第一个元素不是id为109的元素)。如何在

我正在Django中进行查询,该查询包含一个非任意顺序的产品ID数组,以及与这些ID对应的产品列表:

product_ids= [109, 33, 76, 332, 112]
products_inventory = get_list_or_404(Products, id__in=product_ids)

查询工作正常。但是,products_inventory与product_id定义的元素没有相同的顺序(即products_inventory中的第一个元素不是id为109的元素)。如何在产品标识定义的产品库存中获得相同的订单

如果您可以在数据库中进行排序,则此答案将帮助您:

如果ID值的顺序之间没有关系,则必须在python中进行排序

首先创建一个dict,将一个ID转换为一个整数,
i
,这样在对两个ID的
i
进行排序时,它们将以正确的顺序排列(即它们在
产品\u ID
中的位置):

现在创建一个函数,该函数接受一个产品并返回一个值,该值在排序时将使产品按正确顺序排列:

def keyfn(product):
    return ordering[product.id]
最后,按照我们的
keyfn
定义的
key
对产品库存进行排序:

product_inventory.sort(key=keyfn)

谢谢你@thebjorn!在我的例子中,没有关系,因此您的纯python解决方案有效:)
product_inventory.sort(key=keyfn)