在Django中订购get_list_or_404

问题描述 投票:2回答:1

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

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

查询工作正常。但是,products_inventory没有必要与product_ids定义的元素相同的顺序(即products_inventory中的第一个元素不是id为109的元素)。如何在product_ids定义的products_inventory中获得相同的订单?

python django django-orm
1个回答
1
投票

如果您可以在数据库中进行排序,那么这个答案将帮助您:get_list_or_404 ordering in django

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

首先创建一个将ID转换为整数的字典i,这样当对两个ID的i进行排序时,它们将按照正确的顺序排列(即它们在product_ids中的位置):

ordering = {id: i for i, id in enumerate(product_ids)}

现在创建一个函数,它接受一个产品并返回一个值,当按照排序时,它将按正确的顺序放置产品:

def keyfn(product):
    return ordering[product.id]

最后,按照我们的key定义的keyfn对产品库存进行排序:

product_inventory.sort(key=keyfn)
© www.soinside.com 2019 - 2024. All rights reserved.