Bagaimana saya dapat mengubah QuerySet Django menjadi daftar dicts? Saya belum menemukan jawaban untuk ini jadi saya bertanya-tanya apakah saya kehilangan semacam fungsi pembantu umum yang digunakan semua orang.
122
Gunakan .values()
metode:
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
Catatan: hasilnya adalah QuerySet
yang sebagian besar berperilaku seperti daftar, tetapi sebenarnya bukan instance dari list
. Gunakan list(Blog.objects.values(…))
jika Anda benar-benar membutuhkan contoh list
.
values()
kembalikan dengan meneruskannya sebagai argumen. Juga berhati-hatilah meskipun sepertinya nilai mengembalikan daftar dicts itu sebenarnya<class 'django.db.models.query.ValuesQuerySet'>
dan bukan daftar.values()
, saya tidak tahu apakah ada metode yang baik untuk melakukan hal yang samavalues()
tetapi juga dengan memanggil metode contoh ?!The
.values()
Metode akan kembali Anda hasil dari jenisValuesQuerySet
yang biasanya apa yang Anda butuhkan dalam kebanyakan kasus.Tetapi jika Anda mau, Anda bisa berubah
ValuesQuerySet
menjadi daftar Python asli menggunakan pemahaman daftar Python seperti yang diilustrasikan pada contoh di bawah ini.Saya menemukan bantuan di atas jika Anda menulis tes unit dan perlu menegaskan bahwa nilai kembalian yang diharapkan dari suatu fungsi cocok dengan nilai kembalian aktual, dalam hal ini keduanya
expected_result
danactual_result
harus dari jenis yang sama (misalnya kamus).sumber
list(result)
Jika Anda memerlukan tipe data asli karena alasan tertentu (misalnya serialisasi JSON) ini adalah cara cepat 'n' saya untuk melakukannya:
Seperti yang Anda lihat, membangun dict di dalam daftar tidak terlalu KERING jadi jika ada yang tahu cara yang lebih baik ...
sumber
data = list( blogs )
dan kemudianjson.dumps( data )
. Sebuah array keluar dengan sekumpulan objek di sisi javascript, tidak perlu parsing.Anda tidak benar-benar mendefinisikan seperti apa bentuk kamus itu, tetapi kemungkinan besar Anda mengacu pada
QuerySet.values()
. Dari dokumentasi resmi django :sumber
Ketik Cast to List
sumber
Anda dapat menggunakan
values()
metode pada dikt yang Anda peroleh dari bidang model Django tempat Anda membuat kueri dan kemudian Anda dapat dengan mudah mengakses setiap bidang dengan nilai indeks.Sebut saja seperti ini -
sumber
Anda perlu
DjangoJSONEncoder
danlist
membuat AndaQueryset
menjadijson
, ref: Python JSON membuat serial objek Desimalsumber
Sederhananya
list(yourQuerySet)
.sumber
Anda dapat mendefinisikan fungsi menggunakan model_to_dict sebagai berikut:
sumber