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
相关产品推荐
相关产品推荐

