You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django QuerySet如何按用户输入的多物料名称返回对应价格列表

Django获取对应选择列表的物料价格解决方案

问题原因

你用filter加多个Q条件查询时,数据库只会返回唯一的匹配记录——因为Not Required在表中只有一条,所以哪怕你写两次Q条件,结果里也只会出现一次0,自然得不到四个元素的结果。要实现和用户选择列表一一对应的价格列表,得换个思路。

推荐解决方案:字典映射(简单高效)

先一次性把所有物料的名称和价格缓存成字典,再遍历用户选择的列表逐个匹配,逻辑清晰且只需要一次数据库查询:

# 第一步:获取所有物料的名称-价格映射字典
price_mapping = dict(rawmaterial.objects.values_list('materialName', 'price'))

# 第二步:用户选择的物料列表(示例)
selected_items = ['Material 3', 'Material 2', 'Not Required', 'Not Required']

# 第三步:生成对应价格列表
result_prices = [price_mapping.get(item, 0) for item in selected_items]

执行后result_prices就是[900, 456, 0, 0],完全符合你的需求。如果遇到字典里没有的物料名称,get方法会返回默认值0,也能兼容异常情况。

备选方案:逐个查询(适合数据量极小场景)

如果物料表数据极少,也可以逐个遍历选择项查询,但这种方式会产生多次数据库请求,不推荐大量使用:

selected_items = ['Material 3', 'Material 2', 'Not Required', 'Not Required']
result_prices = []
for item in selected_items:
    # 取对应价格,没有则返回0
    price = rawmaterial.objects.filter(materialName=item).values_list('price', flat=True).first() or 0
    result_prices.append(price)

内容的提问来源于stack exchange,提问作者Mr Bim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:31:05