Django如何将Decimal对象传递给json

Dar*_*ech 8 django json

我有一个包含Decimal对象的查询集.我想将这些数据传递给json转储行:

ql = Product.objects.values_list('length', 'width').get(id=product_id)
data = simplejson.dumps(ql)

TypeError: Decimal('62.20') is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

我应该如何将这些值传递给json.当然我可以将值转换为字符串 - 但我猜这不是一个好的解决方案.

任何帮助非常感谢.

Dan*_*man 23

Django已经包含了一个可以处理小数的编码器,以及日期时间:django.core.serializers.json.DjangoJSONEncoder.只需将其作为cls参数传递:

data = simplejson.dumps(ql, cls=DjangoJSONEncoder)
Run Code Online (Sandbox Code Playgroud)

  • 注意如果你在使用`.values`或`.values_list`序列化一个查询集时会得到一个`TypeError`错误,它返回一个`ValuesQuerySet` - 强制进入列表以便它工作,所以使用上面的例子它将是: `data = simplejson.dumps(list(ql),cls = DjangoJSONEncoder)` (2认同)