Django cenderung mengisi ruang horizontal ketika menambah atau mengedit entri pada admin, tetapi, dalam beberapa kasus, adalah pemborosan ruang yang nyata, ketika, misalnya, mengedit bidang tanggal, lebar 8 karakter, atau bidang karakter, juga 6 atau 8 karakter lebar, dan kemudian kotak edit naik menjadi 15 atau 20 karakter.
Bagaimana cara memberi tahu admin seberapa lebar kotak teks seharusnya, atau tinggi kotak edit BidangTeks?
Jawaban:
Anda harus menggunakan ModelAdmin.formfield_overrides .
Ini cukup mudah - dalam
admin.py
, tentukan:sumber
filter_horizontal
ataufilter_vertical
disetel untuk bidang terkait di YourModelAdmin. Saya telah menghabiskan beberapa waktu untuk memikirkan hal ini.models.TextField: {'widget': Textarea(attrs={'rows':4})}
tetapi lebarnya menjadi lebih kecil juga.Anda dapat menyetel atribut HTML sewenang-wenang pada widget menggunakan properti "attrs" -nya .
Anda dapat melakukan ini pada admin Django menggunakan formfield_for_dbfield:
atau dengan subkelas Widget khusus dan kamus formfield_overrides :
sumber
Untuk mengubah lebar bidang tertentu.
Dibuat melalui ModelAdmin.get_form :
sumber
Pilihan cepat dan kotor adalah dengan menyediakan template kustom untuk model yang dimaksud.
Jika Anda membuat template dengan nama
admin/<app label>/<class name>/change_form.html
maka admin akan menggunakan template tersebut sebagai pengganti default. Artinya, jika Anda memiliki model yang dinamaiPerson
dalam aplikasi bernamapeople
, Anda akan membuat template bernamaadmin/people/person/change_form.html
.Semua templat admin memiliki
extrahead
blok yang dapat Anda timpa untuk menempatkan barang di dalamnya<head>
, dan bagian terakhir dari teka-teki tersebut adalah kenyataan bahwa setiap bidang memiliki ID HTMLid_<field-name>
.Jadi, Anda bisa meletakkan sesuatu seperti berikut ini di template Anda:
sumber
Jika Anda ingin mengubah atribut pada instance per-field, Anda dapat menambahkan properti "attrs" langsung ke entri formulir Anda.
sebagai contoh:
Properti "attrs" pada dasarnya meneruskan markup HTML yang akan menyesuaikan bidang formulir. Setiap entri adalah tupel dari atribut yang ingin Anda ganti dan nilai yang ingin Anda timpa. Anda dapat memasukkan atribut sebanyak yang Anda suka selama Anda memisahkan setiap tupel dengan koma.
sumber
Cara terbaik yang saya temukan adalah seperti ini:
Ini jauh lebih baik untuk ModelForm daripada menimpa bidang dengan widget berbeda, karena mempertahankan
name
danhelp_text
atribut serta nilai default bidang model, jadi Anda tidak perlu menyalinnya ke formulir Anda.sumber
Saya memiliki masalah serupa dengan TextField. Saya menggunakan Django 1.0.2 dan ingin mengubah nilai default untuk 'baris' dalam area teks terkait. formfield_overrides tidak ada pada versi ini. Mengganti formfield_for_dbfield berfungsi tetapi saya harus melakukannya untuk setiap subkelas ModelAdmin saya atau itu akan menghasilkan kesalahan rekursi. Akhirnya, saya menemukan bahwa menambahkan kode di bawah ini ke models.py berfungsi:
Kemudian gunakan MyTextField sebagai ganti TextField saat menentukan model Anda. Saya menyesuaikannya dari jawaban ini ke pertanyaan serupa.
sumber
Ini dijelaskan dengan baik di Django FAQ :
Q: Bagaimana cara mengubah atribut widget pada bidang dalam model saya?
A: Ganti formfield_for_dbfield di kelas ModelAdmin / StackedInline / TabularInline
sumber
Anda selalu dapat menyetel ukuran bidang Anda dalam lembar gaya kustom dan memberitahu Django untuk menggunakan itu untuk kelas ModelAdmin Anda:
sumber
untuk 1.6, menggunakan formulir saya harus menentukan atribut textarea di dalam charfield:
sumber
Jawaban yang sama dengan msdin tetapi dengan TextInput, bukan TextArea:
sumber
Berikut ini solusi sederhana, namun fleksibel. Gunakan formulir kustom untuk mengganti beberapa widget.
Widget yang diberikan
ElephantForm
akan menggantikan widget default. Kuncinya adalah representasi string dari lapangan. Bidang yang tidak ditentukan dalam formulir akan menggunakan widget default.Perhatikan bahwa meskipun
age
adalahIntegerField
kita dapat menggunakanTextInput
widget, karena tidak sepertiNumberInput
,TextInput
menerimasize
atribut.Solusi ini dijelaskan di artikel ini .
sumber
Jika Anda bekerja dengan bidang ForeignKey yang melibatkan pilihan / opsi / menu tarik-turun, Anda dapat mengganti
formfield_for_foreignkey
di contoh Admin:Informasi lebih lanjut tentang pola ini di sini dan di sini .
sumber
Dan satu contoh lagi juga:
Jika Anda hanya ingin mengedit ukuran bidang tertentu, Anda dapat menggunakan ini.
sumber