我有Product
模型,而我的产品没有available_quantity
和prices
字段,因为这些字段在另一个服务中。因此,我在查询集中添加了自定义字段。
这是我的代码;
for product in queryset:
product.info_bundle = {
'available_quantity': stock_info.get(product.stock_code),
'prices': 100,
}
我将自定义info_bundle
字段添加到queryset。
问题是;我无法通过queryset.order_by(‘avaliable_quantity’)
订购,因为我添加了此内容。它不是来自数据库,因此SQL无法找到该字段。
答案 0 :(得分:1)
您无法使用从第三方服务获得的字段在数据库级别上进行排序。根据您的要求,您需要在内存中排序。但是,正如您所建议的那样,您可以将查询集转换为列表。如果我理解正确,那么您正在使用DRF并在get_queryset方法中进行此排序。因此,在这里想到以下方法:
答案 1 :(得分:0)
你不能那样做。
order_by()
在数据库级别执行,并且只能在 db字段 或 带注释的字段 < / strong>。
答案 2 :(得分:0)
您可以将此查询集转换为字典数组,并在每个项目中使用此“自定义字段”。像这样:
products = []
for product in queryset:
products.append({
"product" = product,
"available_quantity" = stock_info.get(product.stock_code),
"prices" = 100
})
那么你可以通过字典字段对数组进行排序。像这样:
new_sorted_list = sorted(products, key=lambda d: d["available_quantity"], reverse=True)
# You can avoid the reverse parameter, it's for ASC or DESC results
现在您的列表已按自定义字段排序。
希望我能帮到你。