Saya memiliki kode berikut untuk serialisasi queryset;
def render_to_response(self, context, **response_kwargs):
return HttpResponse(json.simplejson.dumps(list(self.get_queryset())),
mimetype="application/json")
Dan berikut adalah milik saya get_querset()
[{'product': <Product: hederello ()>, u'_id': u'9802', u'_source': {u'code': u'23981', u'facilities': [{u'facility': {u'name': {u'fr': u'G\xe9n\xe9ral', u'en': u'General'}, u'value': {u'fr': [u'bar', u'r\xe9ception ouverte 24h/24', u'chambres non-fumeurs', u'chambres familiales',.........]}]
Yang saya butuhkan untuk membuat serial. Tetapi dikatakan tidak dapat membuat serial <Product: hederello ()>
. Karena list terdiri dari obyek dan dicts django. Ada ide?
Jawaban:
simplejson
danjson
tidak bekerja dengan objek django dengan baik.Django built-in serializers hanya bisa cerita bersambung querysets diisi dengan Django objek:
Dalam kasus Anda,
self.get_queryset()
berisi campuran obyek dan dicts di dalamnya.Salah satu opsinya adalah menyingkirkan contoh model di
self.get_queryset()
dan menggantinya dengan dicts menggunakanmodel_to_dict
:Semoga membantu.
sumber
'NoneType' object has no attribute 'concrete_model'
... Dan menggunakan Django 1.4+safe
tage. stackoverflow.com/a/57939897/4157431Cara termudah adalah dengan menggunakan JsonResponse .
Untuk queryset, Anda harus meneruskan daftar
values
queryset tersebut, seperti:sumber
Saya menemukan bahwa ini dapat dilakukan dengan cukup sederhana menggunakan metode ".values", yang juga memberikan field bernama:
"list" harus digunakan untuk mendapatkan data sebagai iterable, karena jenis "value queryset" hanya berupa dict jika diambil sebagai iterable.
Dokumentasi: https://docs.djangoproject.com/en/1.7/ref/models/querysets/#values
sumber
list()
tampaknya masih diperlukan.Dari versi 1.9 Cara yang lebih mudah dan resmi untuk mendapatkan json
sumber
Js-programmer kami meminta saya untuk mengembalikan data format JSON yang tepat alih-alih string yang dikodekan json kepadanya.
Di bawah ini solusinya. (Ini akan mengembalikan objek yang dapat digunakan / dilihat langsung di browser)
sumber
HttpResponse(tmpObj)
Pertama saya menambahkan metode to_dict ke model saya;
Lalu saya punya ini;
dan terakhir gunakan kelas ini untuk membuat serialisasi queryset saya.
Ini bekerja dengan cukup baik
sumber