Berikut pernyataan lapangan dalam bentuk:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
Saya ingin menetapkan nilai awal menjadi 3
dan ini sepertinya tidak berhasil. Saya telah bermain-main dengan param, tanda kutip / tanpa tanda kutip, dll ... tetapi tidak ada perubahan.
Adakah yang bisa memberi saya jawaban pasti jika memungkinkan? Dan / atau perubahan yang diperlukan dalam potongan kode saya?
Saya menggunakan Django 1.0
django
django-models
django-forms
kehidupan besar
sumber
sumber
Jawaban:
Coba tetapkan nilai awal saat Anda membuat contoh formulir:
sumber
'3'
sesuai dengan nilai pertama tupel atau nilai kedua?Ini tidak menyentuh pertanyaan langsung yang ada, tetapi Q / A ini muncul untuk pencarian terkait dengan mencoba untuk menetapkan nilai yang dipilih ke
ChoiceField
.Jika Anda telah memanggil
super().__init__
di kelas Formulir Anda, Anda harus memperbaruiform.initial
kamus, bukanfield.initial
properti. Jika Anda belajarform.initial
(misalnyaprint self.initial
setelah panggilan kesuper().__init__
), itu akan berisi nilai untuk semua bidang. Memiliki nilaiNone
di dict akan menimpafield.initial
nilai.misalnya
sumber
Anda juga dapat melakukan hal berikut. dalam bentuk Anda kelas def:
lalu saat memanggil formulir dalam tampilan Anda, Anda dapat secara dinamis menyetel pilihan awal dan daftar pilihan.
Catatan: nilai awal harus berupa daftar dan pilihannya harus 2-tupel, dalam contoh saya di atas, saya memiliki daftar 2-tupel. Semoga ini membantu.
sumber
initial
mengacu pada kunci item yang akan dipilih, bukan indeksnya. Butuh beberapa kali percobaan untuk menyelesaikan ini!Saya mengalami masalah ini juga, dan menemukan bahwa masalahnya ada di browser. Saat Anda menyegarkan browser mengisi kembali formulir dengan nilai yang sama seperti sebelumnya, mengabaikan bidang yang dicentang. Jika Anda melihat sumber, Anda akan melihat nilai yang dicentang sudah benar. Atau letakkan kursor di kolom URL browser Anda dan tekan enter. Itu akan memuat ulang formulir dari awal.
sumber
Baik jawaban Tom dan Burton pada akhirnya berhasil untuk saya, tetapi saya mengalami sedikit kesulitan untuk mencari tahu bagaimana menerapkannya ke
ModelChoiceField
.Satu-satunya trik untuk itu adalah bahwa pilihan disimpan sebagai tupel
(<model's ID>, <model's unicode repr>)
, jadi jika Anda ingin menyetel pemilihan model awal, Anda meneruskan ID model sebagai nilai awal, bukan objek itu sendiri atau namanya atau yang lainnya. Maka sesederhana itu:Alternatifnya,
initial
argumen dapat diabaikan sebagai pengganti baris tambahan dengan:sumber
GET
permintaan dan menyetelnya dari dalam tampilan.Dave - apakah beruntung menemukan solusi untuk masalah browser? Apakah ada cara untuk memaksa penyegaran?
Adapun masalah aslinya, coba yang berikut ini saat menginisialisasi formulir:
sumber
Instances should always modify self.fields; they should not modify self.base_fields.
Untuk memastikan saya perlu melihat bagaimana Anda merender formulir. Nilai awal hanya digunakan dalam bentuk tak terikat, jika terikat dan nilai untuk bidang itu tidak disertakan, tidak ada yang akan dipilih.
sumber
Coba ini berhasil untuk saya, saya telah menambahkan ini di models.py
sumber
TypeError at /my/url/ __init__() got an unexpected keyword argument 'default' Request Method: GET Request URL: http://localhost:8000/my/url/ Django Version: 1.8.1 Exception Type: TypeError Exception Value: __init__() got an unexpected keyword argument 'default'