Django 1.7 ने JsonResponse objects पेश किया, जिसे मैं अपने AJAX अनुरोध में मानों की एक सूची वापस करने के लिए उपयोग करने का प्रयास करता हूं।मॉडल फ़ील्ड को JsonResponse ऑब्जेक्ट में कैसे पास करें
मैं एक JsonResponse वस्तु को
>>> Genre.objects.values('name', 'color')
[{'color': '8a3700', 'name': 'rock'}, {'color': 'ffff00', 'name': 'pop'}, {'color': '8f8f00', 'name': 'electronic'}, {'color': '9e009e', 'name': 'chillout'}, {'color': 'ff8838', 'name': 'indie'}, {'color': '0aff0a', 'name': 'techno'}, {'color': 'c20000', 'name': "drum'n'bass"}, {'color': '0000d6', 'name': 'worldmusic'}, {'color': 'a800a8', 'name': 'classic'}, {'color': 'dbdb00', 'name': 'hiphop'}]
पास करना चाहते हैं।
हालांकि, मेरे प्रयास विफल हो जाते हैं।
>>> JsonResponse({'foo': 'bar', 'blib': 'blab'}) # works
<django.http.response.JsonResponse object at 0x7f53d28bbb00>
>>> JsonResponse(Genre.objects.values('name', 'color')) # doesn't work
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/marcel/Dokumente/django/FlushFM/env/lib/python3.4/site-packages/django/http/response.py", line 476, in __init__
raise TypeError('In order to allow non-dict objects to be '
TypeError: In order to allow non-dict objects to be serialized set the safe parameter to False
यह Genre.objects.values()
के विभिन्न डेटा संरचना की वजह से शायद है।
यह कैसे किया जाएगा सही?
[संपादित करें]
safe=False
साथ
मैं
>>> JsonResponse(Genre.objects.values('name', 'color'), safe=False)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/marcel/Dokumente/django/FlushFM/env/lib/python3.4/site-packages/django/http/response.py", line 479, in __init__
data = json.dumps(data, cls=encoder)
File "/usr/lib/python3.4/json/__init__.py", line 237, in dumps
**kw).encode(obj)
File "/usr/lib/python3.4/json/encoder.py", line 192, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python3.4/json/encoder.py", line 250, in iterencode
return _iterencode(o, 0)
File "/home/marcel/Dokumente/django/FlushFM/env/lib/python3.4/site-packages/django/core/serializers/json.py", line 109, in default
return super(DjangoJSONEncoder, self).default(o)
File "/usr/lib/python3.4/json/encoder.py", line 173, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: [{'color': '8a3700', 'name': 'rock'}, {'color': 'ffff00', 'name': 'pop'}, {'color': '8f8f00', 'name': 'electronic'}, {'color': '9e009e', 'name': 'chillout'}, {'color': 'ff8838', 'name': 'indie'}, {'color': '0aff0a', 'name': 'techno'}, {'color': 'c20000', 'name': "drum'n'bass"}, {'color': '0000d6', 'name': 'worldmusic'}, {'color': 'a800a8', 'name': 'classic'}, {'color': 'dbdb00', 'name': 'hiphop'}] is not JSON serializable
क्या काम करता है
>>> JsonResponse(list(Genre.objects.values('name', 'color')), safe=False)
<django.http.response.JsonResponse object at 0x7f53d28bb9e8>
है लेकिन वहाँ एक बेहतर तरीका एक मॉडल वस्तु के बाहर एक dict उत्पन्न करने के लिए नहीं है?
क्या आपने त्रुटि संदेश कहने का प्रयास किया था? –
@DanielRoseman अच्छी तरह से हाँ, लेकिन 'सुरक्षित = गलत' सेटिंग भी एक त्रुटि संदेश होगा। क्या आपको आउटपुट की आवश्यकता है? – speendo
@speendo क्या यह 'सुरक्षित = गलत' के साथ भी वही त्रुटि है? शायद 'ValuesQuerySet'' सूची() ': 'JsonResponse (सूची (Genre.objects.values (' name ',' color ') को पार करने के बाद इसे आजमाएं))' –