2012-05-08 12 views
11

में उपयोग के लिए dict के लिए मैं है निम्नलिखित क्वेरीसमूह:Django क्वेरीसमूह 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"] 
]} 

उत्तर

0
from django.utils import simplejson 

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

संपादित

के रूप में प्राप्त कर सकते हैं

यह आपके प्रश्न से स्पष्ट नहीं था कि price एक DecimalField है। वैकल्पिक रूप से

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

, यदि आप कीमत एक स्ट्रिंग होना चाहते हैं: ऐसा लगता है कि आप Decimal से float में बदलने की आवश्यकता होगी

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

त्रुटि: दशमलव ('70 .1700 ') JSON serializable – nelsonvarela

+0

उत्तर में नए संपादन देखें नहीं। – dgel

34

एक बेहतर दृष्टिकोण 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 में परिवर्तित करने के लिए हुप्स के माध्यम से कोई कूद नहीं।

अद्यतन: सरलजॉन के बजाय बिल्टिन जेसन का उपयोग करने के लिए उत्तर बदल दिया।

+5

बस एक नोट ... 'django.utils.simplejson' का उपयोग Django 1.5 के रूप में चित्रित किया गया है। अधिक जानकारी के लिए [रिलीज नोट्स] (https://docs.djangoproject.com/en/dev/releases/1.5/#system-version-of-simplejson-no-longer-used) देखें। उदाहरण के बाद – Ngenator

+2

दिखाया गया उदाहरण: एक बार मेरे पास 'price_json' है, मैं इसे टेम्पलेट/जेएस पर कैसे पास करूं? और मैं इसे वहां से कैसे एक्सेस करूं? – Maor

संबंधित मुद्दे