Подтвердить что ты не робот

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"]
]}
4b9b3361

Ответ 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})