Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menapis Pilihan ForeignKey dalam Django ModelForms berdasarkan Data Model Berkaitan?

Bagaimana untuk Menapis Pilihan ForeignKey dalam Django ModelForms berdasarkan Data Model Berkaitan?

Linda Hamilton
Linda Hamiltonasal
2024-11-16 16:05:03220semak imbas

How to Filter ForeignKey Choices in Django ModelForms based on Related Model Data?

Menapis Pilihan ForeignKey dalam Django ModelForms

Apabila bekerja dengan model Django yang mempunyai hubungan ForeignKey, anda mungkin menghadapi senario di mana anda perlu menyekat pilihan yang tersedia untuk bidang tertentu berdasarkan kriteria tertentu. Dalam kes khusus ini, kami mempunyai senario di mana kami ingin mengehadkan pilihan Kadar untuk model Pelanggan kepada hanya yang dikaitkan dengan Syarikat induknya.

Untuk mencapai penapisan ini dalam Django 1.0, anda boleh menggunakan atribut set pertanyaan daripada ModelChoiceField yang sepadan. Dalam kes anda, medan yang berkaitan ialah "kadar." Dengan menyediakan QuerySet tersuai pada medan ini, anda boleh menggunakan kriteria penapisan yang diperlukan:

form.fields["rate"].queryset = Rate.objects.filter(company_id=the_company.id)

Pengubahsuaian ini akan memastikan bahawa apabila membuat atau mengedit Klien, pilihan Kadar akan dihadkan kepada hanya yang dikaitkan dengan Syarikat milik Klien. Dengan mengendalikan penapisan ini secara eksplisit dalam paparan, anda mengelakkan sebarang kemungkinan komplikasi yang mungkin timbul daripada menggunakan atribut limit_choices_to dalam antara muka Pentadbir.

Pendekatan ini membolehkan anda mengekalkan cara yang bersih dan cekap untuk menapis pilihan ForeignKey dalam anda Django ModelForms, memberikan lebih fleksibiliti dalam tugasan manipulasi data aplikasi anda.

Atas ialah kandungan terperinci Bagaimana untuk Menapis Pilihan ForeignKey dalam Django ModelForms berdasarkan Data Model Berkaitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn