python - 在 Django 中的 get_list_or_404 中排序
问题描述
我在 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 中获得相同的订单?
解决方案
如果您可以在数据库中进行排序,那么这个答案将对您有所帮助:get_list_or_404 ordering in django
如果 ID 值的顺序之间没有关系,则必须在 python 中进行排序。
首先创建一个将 ID 转换为整数的 dict i
,这样在i
对两个 ID 进行排序时,它们将按正确的顺序排列(即它们在 中的位置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)
推荐阅读
- javascript - fb 分享不能在 textarea 中预填充文本“对此说点什么”
- javascript - 套接字 IO:加载资源失败:net::ERR_BLOCKED_BY_CLIENT
- javascript - 在 Wordpress 中将 URL 参数添加到 AJAX 过滤器
- json - 控制器中的 Groovy 到 Json
- ios - 如何将 Cocoa Touch 模板添加到 Xcode?
- azure-data-factory - REST API 中按工厂列出方法中的页面大小
- sql - SQL 数据库结构
- outlook - 如何将电话号码中的呼叫添加到现有的 Microsoft Teams 会议?
- php - 如何在新标签中打开 WooCommerce 中的可下载产品
- node.js - 在海拔 powershell 中执行命令