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

Django报错:QuerySet无法JSON序列化,如何转为可序列化列表?

解决JSON序列化问题:将ValuesQuerySet转换为可序列化的字符串列表

你的问题核心是当前生成的coin_amount是嵌套的QuerySet结构,而且里面的Decimal类型默认不支持JSON序列化。咱们可以通过两步调整来解决:

方法一:简洁的列表推导式(假设每个查询必返回一条记录)

直接修改你的列表推导式,用values_list替代values来获取单个值,再提取结果并转成字符串:

coin_amount = [
    str(Portfolio.objects.filter(user=request.user, coin=key['coin']).values_list('amount', flat=True).first())
    for key in coin_sell_options
]
  • values_list('amount', flat=True):返回只包含amount值的QuerySet,而非字典结构,更高效。
  • .first():直接取出QuerySet的第一个结果(因为你的查询条件是user+特定coin,理论上只会有一条匹配记录)。
  • str():把Decimal类型转为字符串,让JsonResponse可以正常序列化。

方法二:更易读的循环写法(支持空记录处理)

如果担心某些coin没有对应的持仓记录,可以用循环来做容错处理:

coin_amount = []
for key in coin_sell_options:
    portfolio_record = Portfolio.objects.filter(user=request.user, coin=key['coin']).first()
    # 如果有记录就转字符串,没有就用默认的0值字符串
    amount_str = str(portfolio_record.amount) if portfolio_record else '0.0000000'
    coin_amount.append(amount_str)

这样处理后,coin_amount就会变成你需要的['3.0000000', '0.1000000', '9.0000000']格式,直接传给JsonResponse就没问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:56:08