Apakah mungkin untuk memasukkan beberapa model ke dalam satu ModelForm
di django? Saya mencoba membuat formulir edit profil. Jadi saya perlu menyertakan beberapa bidang dari model User dan model UserProfile. Saat ini saya menggunakan 2 bentuk seperti ini
class UserEditForm(ModelForm):
class Meta:
model = User
fields = ("first_name", "last_name")
class UserProfileForm(ModelForm):
class Meta:
model = UserProfile
fields = ("middle_name", "home_phone", "work_phone", "cell_phone")
Apakah ada cara untuk menggabungkan ini ke dalam satu formulir atau apakah saya hanya perlu membuat formulir dan menangani pemuatan db dan menyimpan sendiri?
python
django
django-forms
Jason Webb
sumber
sumber
Jawaban:
Anda bisa menampilkan kedua formulir di templat di dalam satu
<form>
elemen html. Kemudian proses formulir secara terpisah dalam tampilan. Anda masih dapat menggunakanform.save()
dan tidak perlu memproses db memuat dan menyimpan sendiri.Dalam hal ini Anda tidak memerlukannya, tetapi jika Anda akan menggunakan formulir dengan nama bidang yang sama, lihat
prefix
kwarg untuk formulir django. (Saya menjawab pertanyaan tentang itu di sini ).sumber
<form>
elemen yang sama ?FormView
hanya memiliki satu yangform_class
ditugaskan padanya.TemplateView
dan implementasikan logika yang sama dengan FormView, tetapi dengan berbagai bentuk.Anda dapat mencoba menggunakan potongan kode ini:
Contoh Penggunaan:
sumber
admin.E016) The value of 'form' must inherit from 'BaseModelForm'.
UpdateView
?erikbwork dan saya memiliki masalah bahwa seseorang hanya dapat memasukkan satu model ke dalam Tampilan Berbasis Kelas yang umum. Saya menemukan cara serupa untuk mendekatinya seperti Miao, tetapi lebih modular.
Saya menulis Mixin sehingga Anda dapat menggunakan semua Tampilan Berbasis Kelas generik. Tentukan model, kolom, dan sekarang juga child_model dan child_field - lalu Anda dapat membungkus kolom dari kedua model dalam tag seperti yang dijelaskan Zach.
Contoh Penggunaan:
Atau dengan ModelFormClass:
Selesai. Harapan yang membantu seseorang.
sumber
save_child_form.course_key = self.object
, apakah.course_key
?return self.child_form_class(**self.get_form_kwargs())
tetapi mendapatkan contoh model yang salahkwargs['instance']
, misalnya contoh adalah model utama dan bukan model anak. Untuk memperbaikinya, Anda perlu menyimpan kwargs ke dalam variabel terlebih dahulukwargs = self.get_form_kwargs()
kemudian memperbaruikwargs['initial']
dengan contoh model yang benar sebelum memanggilreturn self.child_form_class(**kwargs)
. Dalam kasus saya,kwargs['instance'] = kwargs['instance'].profile
jika ini masuk akal.model_forms
?Anda mungkin harus melihat formulir Inline . Kumpulan formulir sebaris digunakan saat model Anda dihubungkan dengan kunci asing.
sumber
Anda dapat memeriksa jawaban saya di sini untuk masalah serupa.
Ini berbicara tentang cara menggabungkan pendaftaran dan profil pengguna ke dalam satu bentuk, tetapi dapat digeneralisasikan ke kombinasi ModelForm apa pun.
sumber
Saya menggunakan Django betterforms 's beraneka ragam dan MultiModelForm dalam proyek saya. Namun, kodenya dapat ditingkatkan. Misalnya, ini bergantung pada django.six, yang tidak didukung oleh 3. +, tetapi semua ini dapat diperbaiki dengan mudah
Pertanyaan ini telah muncul beberapa kali di StackOverflow, jadi saya pikir inilah saatnya untuk menemukan cara standar untuk mengatasi hal ini.
sumber