Saya memiliki model yang terdaftar di situs admin. Salah satu bidangnya adalah ekspresi string panjang. Saya ingin menambahkan bidang formulir kustom ke halaman tambah / perbarui model ini di admin yang berdasarkan nilai bidang ini saya akan membangun ekspresi string panjang dan menyimpannya di bidang model yang relevan.
Bagaimana saya bisa melakukan itu?
UPDATE: Pada dasarnya yang saya lakukan adalah membangun ekspresi matematika atau string dari simbol, pengguna memilih simbol (ini adalah bidang khusus yang bukan bagian dari model) dan ketika dia mengklik simpan maka saya membuat representasi ekspresi string dari daftar simbol dan menyimpannya di DB. Saya tidak ingin simbol menjadi bagian dari model dan DB, hanya ekspresi akhir.
fields = '__all__'
diMeta
kelas Anda , jika tidak django mengeluh:Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is deprecated
YourModelAdmin.list_display[0], 'extra_field' is not a callable or an attribute of 'YourModelAdmin' or found in the model 'YourModel'.
AttributeError: Unable to lookup "extra_field"...
, coba tambahkan alabel
keextra_field
definisi. Tampaknya django mencoba untuk "menebak" labelnya, dengan melihat padaModel
danModelAdmin
untuk definisi atribut tersebut.Unknown field(s) (extra_field) specified for YourModel. Check fields/fieldsets/exclude attributes of class YourModelAdmin.
. Solusi untuk itu adalahextra_field = forms.CharField(widget=forms.HiddenInput())
Itu mungkin dilakukan di admin, tetapi tidak ada cara yang sangat mudah untuk itu. Juga, saya ingin memberi nasihat untuk menyimpan kebanyakan logika bisnis dalam model Anda, sehingga Anda tidak akan bergantung pada Admin Django.
Mungkin akan lebih mudah (dan bahkan lebih baik) jika Anda memiliki dua bidang terpisah pada model Anda. Kemudian tambahkan metode pada model Anda yang menggabungkannya.
Sebagai contoh:
Kemudian di admin Anda dapat menambahkan bidang
combined_fields()
sebagai hanya baca:Jika Anda ingin menyimpan
combined_fields
dalam database, Anda juga bisa menyimpannya saat menyimpan model:sumber
save()
, periksa pembaruan jawaban saya.Django 2.1.1 Jawaban utama membuat saya setengah jalan untuk menjawab pertanyaan saya. Itu tidak membantu saya menyimpan hasil ke bidang dalam model saya yang sebenarnya. Dalam kasus saya, saya menginginkan bidang teks yang dapat dimasukkan pengguna ke dalam data, kemudian ketika terjadi penyimpanan, data akan diproses dan hasilnya dimasukkan ke dalam bidang dalam model dan disimpan. Sementara jawaban asli menunjukkan bagaimana mendapatkan nilai dari bidang ekstra, itu tidak menunjukkan bagaimana menyimpannya kembali ke model setidaknya di Django 2.1.1
Ini mengambil nilai dari bidang khusus yang tidak terikat, memproses, dan menyimpannya ke dalam bidang deskripsi nyata saya:
sumber
Anda selalu dapat membuat template admin baru, dan melakukan apa yang Anda butuhkan di admin_view (menimpa admin menambahkan url ke admin_view Anda):
sumber
Jika Anda benar-benar hanya ingin menyimpan bidang gabungan pada model dan bukan dua bidang terpisah, Anda dapat melakukan sesuatu seperti ini:
form
atribut diModelAdmin
( https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form ) Andasave_formset
metode diModelAdmin
( https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model )Saya tidak pernah melakukan sesuatu seperti ini jadi saya tidak sepenuhnya yakin bagaimana itu akan berhasil.
sumber