我有以下queryset:
prices = Price.objects.filter(product=product).values_list('price', 'valid_from')
Run Code Online (Sandbox Code Playgroud)
我如何得到"json"的价格
{"aaData": [
["70.1700", "2007-01-01"], # price, valid_form
["72.6500", "2008-01-01"], # price, valid_form
["74.5500", "2009-01-01"], # price, valid_form
["76.6500", "2010-01-01"]
]}
Run Code Online (Sandbox Code Playgroud)
Vas*_*ogi 39
更好的方法是使用DjangoJSONEncoder.它有支持Decimal.
import json
from django.core.serializers.json import DjangoJSONEncoder
prices = Price.objects.filter(product=product).values_list('price', 'valid_from')
prices_json = json.dumps(list(prices), cls=DjangoJSONEncoder)
Run Code Online (Sandbox Code Playgroud)
非常好用.没有跳过用于将单个字段转换为的箍float.
更新:更改了使用builtin json而不是simplejson的答案.
from django.utils import simplejson
prices = Price.objects.filter(product=product).values_list('price', 'valid_from')
simplejson.dumps({'aaData': prices})
Run Code Online (Sandbox Code Playgroud)
编辑
从你的问题中并不清楚这price是一个DecimalField. 看来您需要从 转换Decimal为float:
simplejson.dumps({'aaData': (float(price), valid_from) for price, valid_from in prices})
Run Code Online (Sandbox Code Playgroud)
或者,如果您希望价格是字符串:
simplejson.dumps({'aaData': (str(price), valid_from) for price, valid_from in prices})
Run Code Online (Sandbox Code Playgroud)