Saya mencoba untuk menyimpan objek ke database saya, tetapi ada MultiValueDictKeyError
kesalahan.
Masalahnya terletak di dalam formulir, is_private
diwakili oleh kotak centang. Jika kotak centang TIDAK dipilih, jelas tidak ada yang berlalu. Di sinilah kesalahan dibuang.
Bagaimana cara saya menangani pengecualian ini dengan benar, dan menangkapnya?
Garisnya adalah
is_private = request.POST['is_private']
Jawaban:
Gunakan metode MultiValueDict
get
. Ini juga ada pada dicts standar dan merupakan cara untuk mengambil nilai sambil memberikan default jika tidak ada.Umumnya,
sumber
checked
ketika dicentang tetapi akan dikirimnull
jika tidak dicentang. Anda dapat memeriksa ini di panel "Jaringan" alat Chrome / Firefox DEV. Itu sebabnya Anda menetapkanFalse
sebagai nilai default: jika didapatnull
, buatlahfalse
.Pilih yang terbaik untuk Anda:
1
Jika
is_private
kunci ada di request.POSTis_private
variabel akan sama dengan itu, jika tidak, maka itu akan sama dengan False.2
3
sumber
Anda mendapatkannya karena Anda mencoba untuk mendapatkan kunci dari kamus ketika itu tidak ada. Anda perlu menguji apakah ada di sana terlebih dahulu.
mencoba:
atau
tergantung pada nilai yang Anda gunakan.
sumber
Mengapa Anda tidak mencoba mendefinisikan
is_private
dalam model Anda sebagaidefault=False
?sumber
Hal lain yang perlu diingat adalah yang
request.POST['keyword']
mengacu pada elemen yang diidentifikasi olehname
atribut html yang ditentukankeyword
.Jadi, jika formulir Anda adalah:
kemudian,
request.POST['keyword']
danrequest.POST['results']
akan berisi nilai elemen inputkeyword
danresults
, masing-masing.sumber
Anda dapat menangani kesalahan ini dengan meletakkan:
sumber
Bagi saya, kesalahan ini terjadi pada proyek Django saya karena hal berikut:
Saya memasukkan hyperlink baru ke home.html saya yang ada di folder template proyek saya seperti di bawah ini:
Di views.py, saya memiliki definisi hitung dan sekitar sebagai berikut:
Seperti yang bisa dilihat pada no. 3 di atas, dalam pola url terakhir, saya salah memanggil views.count sedangkan saya perlu memanggil views.about. Baris ini
fulltext = request.GET['fulltext']
dalam fungsi hitung (yang secara keliru disebut karena entri yang salah dalam urlpatterns) dari views.py melemparkan pengecualian multivaluedictkeyerror.Lalu saya mengubah pola url terakhir di urls.py ke yang benar yaitu
path('about/',views.about,name="about")
, dan semuanya bekerja dengan baik.Rupanya, secara umum programmer pemula di Django dapat membuat kesalahan yang saya buat dengan salah memanggil fungsi tampilan lain untuk url, yang mungkin mengharapkan set parameter yang berbeda atau melewati set objek yang berbeda dalam panggilan rendernya, daripada perilaku yang dimaksud.
Semoga ini bisa membantu beberapa programmer pemula untuk Django.
sumber