gpt4 book ai didi

python - Django - Decimal 类型的对象不可 JSON 序列化并转换为 View 中的模型数据

转载 作者:行者123 更新时间:2023-12-02 07:23:05 30 4
gpt4 key购买 nike

rows = fetchall()
resultList = []
resultModel = []
resultDict = []
for row in rows:
resultModel.append(ResultModel(*row)) # Object of type ResultModel is not JSON serializable
resultList.append(list(row)) # Rows returned by pyodbc are not JSON serializable
resultDict.append(dict(zip(columns, row))) # Object of type Decimal is not JSON serializable

我需要获取 View 中数据的 json 版本。为此,我尝试获取数据的 JSON 转储。使用 json.dumps(resultDict) 会引发错误。

尝试从模型获得不同结果的错误已被注释掉以供引用。dict(zip()) 选项最接近我想要的 resultDict 为我提供了一个可以使用的 JSON(键,值)配对。但它给我带来了包含“DecimalField”的结果数据的错误,有没有办法在返回的数据上不出错的情况下保留小数位?看起来这将是 Django 支持的一个简单的事情,所以我不确定我是否遗漏了一些东西!

https://github.com/pyeve/eve-sqlalchemy/issues/50

此外,我可以将 ResultModel 直接处理到 View 中的 json 转储中,而不是设置 2 个结果集(数据相同,只是格式不同)从模型发送回 View 吗?

更新:我明白了。由于这是一个存储过程/直接查询,因此当我们使用时 ORM 映射不起作用dict(zip(columns, row)) ,应使用数据库查询中的列名称。然后,为了获取 JSON,请执行 json.dumps(myDict)

替代解决方案:在模型中,返回 [ResultModel(*row) for row in rows]

浏览次数:

results = Get-model
json = serializers.serialize("python", results, fields=('Column1', 'Column2')

但这也给了我模型名称。有没有办法只获取返回的每个列表的 .fields 部分?

[字段:{列1:“1”,列2:“2”},模型:“app_name.resultmodel”,PK:“”]

最佳答案

尝试扩展 JSONEncoder

import json
from decimal import Decimal

class DecimalEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Decimal):
return float(obj)
return json.JSONEncoder.default(self, obj)

# Usage:
d = Decimal("42.5")
json.dumps(d, cls=DecimalEncoder)

关于python - Django - Decimal 类型的对象不可 JSON 序列化并转换为 View 中的模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52319562/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com