Pertanyaan Kembalikan QuerySet sebagai JSON?


Saya bekerja di Django 1.8 dan kesulitan menemukan cara modern untuk melakukan ini.

Inilah yang saya dapat, berdasarkan Googling dan posting blog ini:

results = PCT.objects.filter(code__startswith='a')
json_res = []
for result in results:
    json_res.append(result.as_dict())
return HttpResponse(json.dumps(json_res), content_type='application/json')

Namun ini memberi saya 'PCT' object has no attribute 'as_dict'.

Tentunya harus ada cara yang lebih rapi sekarang?

Saya bertanya-tanya apakah itu mungkin untuk digunakan JSONResponse tetapi dengan frustasi, dokumen tidak memberikan contoh bagaimana menggunakan JSONRespose dengan kueri, yang harus merupakan kasus penggunaan paling umum. Saya sudah mencoba ini:

results = PCT.objects.filter(code__startswith='a')
return JsonResponse(results, safe=False)

Ini memberi [<PCT: PCT object>, <PCT: PCT object>] is not JSON serializable.


4
2018-05-14 17:01


asal


Jawaban:


Solusi paling sederhana tanpa kerangka tambahan:

results = PCT.objects.filter(code__startswith='a').values('id', 'name')
return JsonResponse({'results': list(results)})

kembali {'results': [{'id': 1, 'name': 'foo'}, ...]}

atau jika Anda hanya membutuhkan nilai-nilai:

results = PCT.objects.filter(code__startswith='a').values_list('id', 'name')
return JsonResponse({'results': list(results)})

kembali {'results': [[1, 'foo'], ...]}


13
2018-05-14 17:18



gunakan nilai () untuk mengembalikan querydict, dan meneruskannya ke json.dumps

values = PCT.objects.filter(code__startswith='a').values()
return HttpResponse(json.dumps(values), content_type='application/json')

https://docs.djangoproject.com/en/1.8/ref/models/querysets/#values


2
2018-05-14 17:21



Melihat Kerangka serialisasi Django. Ini tidak hanya memungkinkan format XML, tetapi juga JSON dan YAML.


0
2018-05-14 17:08