首页 > 解决方案 > 如何将自定义字段添加到查询集并排序

问题描述

我有Product模型,而我的产品没有available_quantityprices字段,因为这些字段在另一项服务中。所以我在我的查询集中添加了自定义字段。

这是我的代码;

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 无法找到该字段。

标签: djangodjango-queryset

解决方案


您无法使用从 3rd 方服务获得的字段在数据库级别上进行排序。根据您的要求,您需要在内存中进行排序。但正如您所建议的,当您这样做时,您会将查询集转换为列表。如果我理解正确,您正在使用 DRF 并在 get_queryset 方法中进行排序。所以这里想到了以下方法:

  1. (解决方法)从 get_queryset 方法返回一个列表,但覆盖视图中使用 get_queryset 方法的其他方法,并让它们使用列表而不是查询集
  2. (解决方法)不要在 get_queryset 方法中进行排序,而是覆盖list方法,并在返回响应之前对内存中的结果进行排序。
  3. 在您的视图中使用自定义排序过滤器。其他 2 个是解决方法,但通过这种方法,您可以构建一个与 DRF 的一般流程一致的解决方案。不过,您可能会在这里遇到同样的问题,因为您在排序时会将查询集转换为列表。

推荐阅读