Anggap saja saya memiliki QueryDict berikut:
<QueryDict: {u'num': [0], u'var1': [u'value1', u'value2'], u'var2': [u'8']}>
Saya ingin memiliki kamus tentang ini, misalnya:
{'num': [0], 'var1':['value1', 'value2'], 'var2':['8']}
(Saya tidak peduli jika simbol unicode u
tetap atau hilang.)
Jika saya melakukannya queryDict.dict()
, seperti yang disarankan oleh situs django , saya kehilangan nilai ekstra yang dimiliki var1
, misalnya:
{'num': [0], 'var1':['value2'], 'var2':['8']}
Saya berpikir untuk melakukan ini:
myDict = {}
for key in queryDict.iterkeys():
myDict[key] = queryDict.getlist(key)
Apakah ada cara yang lebih baik?
dict(queryDict.lists())
tampaknya berfungsidict(queryDict)
.Baru di Django> = 1.4.
QueryDict.dict()
https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.QueryDict.dict
sumber
Inilah yang akhirnya saya gunakan:
Dari penggunaan saya, ini tampaknya memberi Anda daftar yang dapat Anda kirim kembali ke misalnya pembuat formulir.
EDIT: mungkin ini bukan metode terbaik. Tampaknya jika Anda ingin misalnya menulis
QueryDict
ke file untuk alasan gila apa pun,QueryDict.urlencode()
adalah cara yang tepat. Untuk merekonstruksiQueryDict
Anda cukup melakukannyaQueryDict(urlencoded_data)
.sumber
sumber
Jika Anda tidak menginginkan nilai sebagai Array, Anda dapat melakukan hal berikut:
zip adalah alat yang ampuh, baca lebih lanjut di sini http://docs.python.org/2/library/functions.html#zip
sumber
QueryDict.dict()
(yaiturequest.POST.dict()
) dan itu akan mengembalikan nilai dengan benar.Saya mengalami masalah serupa, ingin menyimpan nilai arbitrer dari bentuk sebagai nilai berseri.
Jawaban saya menghindari pengulangan konten kamus secara eksplisit:
dict(querydict.iterlists())
Untuk mengambil nilai seperti kamus yang berfungsi seperti aslinya, fungsi inversi digunakan
QueryDict.setlist()
untuk mengisi nilai baruQueryDict
nilai . Dalam kasus ini, menurut saya iterasi eksplisit tidak dapat dihindari.Fungsi helper saya terlihat seperti ini:
sumber
Memperbarui:
Harap Dicatat: garis bawahi
_
dalam metode iterlists dariqueryDict
. Versi Django: 1.5.1sumber
dict(request.POST)
mengembalikan kamus python aneh dengan nilai yang dibungkus array.dimana sebagai
{x:request.POST.get(x) for x in request.POST.keys()}
hasil keluaran yang diharapkan.sumber
QueryDict.dict()
(yaiturequest.POST.dict()
) dan ini akan mengembalikan nilai dengan benar.cukup tambahkan saja
queryDict=dict(request.GET)
atauqueryDict=dict(QueryDict)
Dalam tampilan dan data Anda akan disimpan di querDict sebagai python Dict.
sumber
Beginilah cara saya memecahkan masalah itu:
sumber
Seperti saya, Anda mungkin lebih akrab dengan
Dict()
metode dalam python. Namun,QueryDict()
ini juga merupakan objek yang mudah digunakan. Misalnya, mungkin Anda ingin mendapatkan nilai darirequest.GET QueryDict()
.Anda dapat melakukan ini seperti:
request.GET.__getitem__(<key>)
.QueryDict()
dokumentasi: https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.QueryDictsumber
request.GET.get(<key>)
ataurequest.GET.getlist(<key>)
Dengan
Django 2.2
ada beberapa solusi bersih:QueryDict.dict()
paling sederhana tetapi akan rusakQueryDict
dengan daftar sebagai nilai, misalnya:akan mengeluarkan
dict(QueryDict)
lebih baik karena akan membuat kamus daftar yang benar:akan mengeluarkan
yang mana yang benar.
sumber
Saya mencoba keduanya
dict(request.POST)
danrequest.POST.dict()
dan menyadari bahwa jika Anda memilikilist
nilai misalnya'var1':['value1', 'value2']
bersarang di Andarequest.POST
, later (request.POST.dict()
) hanya memberi saya akses ke item terakhir dalam daftar bersarang sementara yang sebelumnya (dict(request.POST)
) memungkinkan saya mengakses semua item dalam daftar bersarang.Saya harap ini membantu seseorang.
sumber