django - 如何将自定义字段添加到查询集并排序
问题描述
我有Product
模型,而我的产品没有available_quantity
和prices
字段,因为这些字段在另一项服务中。所以我在我的查询集中添加了自定义字段。
这是我的代码;
for product in queryset:
product.info_bundle = {
'available_quantity': stock_info.get(product.stock_code),
'prices': 100,
}
我将自定义info_bundle
字段添加到查询集。
问题是;我无法订购,queryset.order_by(‘avaliable_quantity’)
因为我添加了这个。它不是来自数据库,因此 SQL 无法找到该字段。
解决方案
您无法使用从 3rd 方服务获得的字段在数据库级别上进行排序。根据您的要求,您需要在内存中进行排序。但正如您所建议的,当您这样做时,您会将查询集转换为列表。如果我理解正确,您正在使用 DRF 并在 get_queryset 方法中进行排序。所以这里想到了以下方法:
- (解决方法)从 get_queryset 方法返回一个列表,但覆盖视图中使用 get_queryset 方法的其他方法,并让它们使用列表而不是查询集
- (解决方法)不要在 get_queryset 方法中进行排序,而是覆盖list方法,并在返回响应之前对内存中的结果进行排序。
- 在您的视图中使用自定义排序过滤器。其他 2 个是解决方法,但通过这种方法,您可以构建一个与 DRF 的一般流程一致的解决方案。不过,您可能会在这里遇到同样的问题,因为您在排序时会将查询集转换为列表。
推荐阅读
- python - 如何安装特定python包的部分?
- nuxt.js - 在 Nuxt.js 中发送每个请求时,如何将对象添加到 apollo 上的数据?
- java - 发送构建 android CODENAMEONE 时出错
- vue.js - VueJS Tailwind 导入问题
- php - 如何向 Facebook Messenger 发送链接?
- c++ - 虚函数可以成为另一个类的朋友吗?
- wordpress - 在 $taxonomy 查询中获取分类单数名称而不是分类 slug
- material-ui - 在 Material UI 中如何将设置的宽度导航设置为粘性?
- c# - 无法从 Visual Studio 2019 中的 MySQL 数据库更新 EntityFramework 模型
- star-schema - 星型数据集市