Django Queryset для использования в json
У меня есть следующий набор запросов:
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"]
]}
Ответы
Ответ 1
Лучшим подходом является использование 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.
Ответ 2
from django.utils import simplejson
prices = Price.objects.filter(product=product).values_list('price', 'valid_from')
simplejson.dumps({'aaData': prices})
Edit
Из вашего вопроса неясно, что price
является DecimalField
. Похоже, вам нужно будет преобразовать из 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})