Django 如何将自定义字段添加到queryset并进行排序
我有Django 如何将自定义字段添加到queryset并进行排序,django,django-queryset,Django,Django Queryset,我有产品型号,我的产品没有可用数量和价格字段,因为这些字段在其他服务中。因此,我在查询集中添加了自定义字段 这是我的密码 for product in queryset: product.info_bundle = { 'available_quantity': stock_info.get(product.stock_code), 'prices': 100, } 我将我的自定义info\u bundle字段添加到queryset 问题是;我
产品
型号,我的产品没有可用数量
和价格
字段,因为这些字段在其他服务中。因此,我在查询集中添加了自定义字段
这是我的密码
for product in queryset:
product.info_bundle = {
'available_quantity': stock_info.get(product.stock_code),
'prices': 100,
}
我将我的自定义info\u bundle
字段添加到queryset
问题是;我无法使用queryset.order\u by('available\u quantity')
进行订购,因为我添加了此项。它不是来自数据库,因此SQL无法找到该字段 你不能那样做
在DB级别执行,它仅在DB字段或注释字段上操作
SO帖子中也提到了类似的问题,您不能使用从第三方服务获得的字段在db级别进行排序。对于您的需求,您需要在内存中进行排序。但正如您所建议的,当您这样做时,您将queryset转换为一个列表。如果我理解正确,您正在使用DRF并在get_queryset方法中进行排序。因此,这里想到了以下方法:
您可以将此查询集转换为字典数组,每个项中都包含此“自定义字段”。像这样:
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
因此,您可以按照dictionary字段对数组进行排序。像这样:
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
现在,您的列表已按自定义字段排序
我希望我能帮助您。可担保数量来自哪里?您是否将其存储在另一个型号的数据库中?因此,您可以对查询集进行注释,以便为每个结果包含Available_quantity字段,然后按其排序。如果没有,则需要在内存中进行排序。@OzgurAkcali Available_数量来自另一个web服务。它独立于模型和数据库。当我在内存中排序时,我应该将queryset转换为list,在get_queryset方法中,我不能返回list,因此我应该返回queryset。