Saya memiliki formulir Django dengan a RegexField
, yang sangat mirip dengan bidang input teks normal.
Dalam pandangan saya, dalam kondisi tertentu saya ingin menyembunyikannya dari pengguna, dan mencoba untuk menjaga bentuknya senada mungkin. Apa cara terbaik untuk mengubah bidang ini menjadi HiddenInput
bidang?
Saya tahu saya bisa mengatur atribut di lapangan dengan:
form['fieldname'].field.widget.attr['readonly'] = 'readonly'
Dan saya dapat mengatur nilai awal yang diinginkan dengan:
form.initial['fieldname'] = 'mydesiredvalue'
Namun, itu tidak akan mengubah bentuk widget.
Apa cara terbaik / paling "django-y" / paling tidak "hacky" untuk menjadikan bidang ini <input type="hidden">
bidang?
sumber
"" is not a valid value for a primary key.
metode is_valid setelah menggunakan solusi ini.from django import forms
hidden_field_name = forms.CharField(label='reset', max_length=256, widget=forms.HiddenInput())
mana kuncinya adalah sintaks widget yang lebih baru di akhir. Tweak untuk kebutuhan Anda.Ini mungkin juga berguna:
{{ form.field.as_hidden }}
sumber
opsi yang berfungsi untuk saya, tentukan bidang dalam bentuk asli sebagai:
maka ketika Anda menimpanya di Kelas baru itu akan menjaga tempatnya.
sumber
Pertama, jika Anda tidak ingin pengguna mengubah data, maka tampak lebih bersih untuk mengecualikan bidang tersebut. Memasukkannya sebagai bidang tersembunyi hanya menambahkan lebih banyak data untuk dikirim melalui kabel dan mengundang pengguna jahat untuk memodifikasinya saat Anda tidak menginginkannya. Jika Anda memiliki alasan yang baik untuk memasukkan bidang tetapi menyembunyikannya, Anda bisa meneruskan argumen kata kunci ke konstruktor modelform. Sesuatu seperti ini mungkin:
Lalu menurut Anda:
Saya lebih suka pendekatan ini untuk memodifikasi internal modelform dalam tampilan, tapi ini masalah selera.
sumber
class Meta: exclude = ["fieldname"]
. Masalahnya di sini adalah, bahwa pendekatan Meta "statis", tapi saya butuh sesuatu yang dinamis. Lihat stackoverflow.com/questions/20243735/…Untuk bentuk normal bisa Anda lakukan
Jika Anda memiliki formulir model, Anda dapat melakukan hal berikut
Anda juga dapat mengganti
__init__
metodesumber
Jika Anda ingin bidang selalu disembunyikan, gunakan yang berikut ini:
sumber
Anda bisa menggunakan css:
Ini akan membuat bidang dan labelnya tidak terlihat.
sumber