Django Queryset用于在json中使用

时间:2012-05-08 15:58:54

标签: django

我有以下查询集:

prices = Price.objects.filter(product=product).values_list('price', 'valid_from')

我怎样才能将价格定为“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"]
]}

2 个答案:

答案 0 :(得分:38)

更好的方法是使用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)

非常容易使用。没有跳过箍将单个字段转换为float

更新:更改了使用内置json而不是simplejson的答案。

答案 1 :(得分:0)

from django.utils import simplejson

prices = Price.objects.filter(product=product).values_list('price', 'valid_from')
simplejson.dumps({'aaData': prices})

修改

您的问题并不清楚priceDecimalField。您似乎需要从Decimal转换为float

simplejson.dumps({'aaData': (float(price), valid_from) for price, valid_from in prices})

或者,如果您希望价格为字符串:

simplejson.dumps({'aaData': (str(price), valid_from) for price, valid_from in prices})