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

Bagaimana untuk Menapis Pilihan ForeignKey dalam Django ModelForms?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 10:38:03293semak imbas

How to Filter ForeignKey Choices in Django ModelForms?

Django ModelForm Filtering ForeignKey Choices

Pengenalan

Apabila membuat borang dalam Django, ia boleh wajar untuk mengehadkan pilihan yang dikemukakan kepada pengguna untuk medan tertentu berdasarkan kriteria tertentu. Ini amat berguna dalam senario yang melibatkan data hierarki, seperti semasa memilih kunci asing.

Kajian Kes: Memilih Pilihan ForeignKey dalam ModelForm

Mari kita pertimbangkan hipotesis Projek Django dengan model berikut:

Dalam kes ini, setiap syarikat mempunyai berbilang kadar dan pelanggan. Setiap pelanggan mesti mempunyai kadar asas yang dipilih daripada kadar syarikat induknya, bukan kadar syarikat lain.

Menghadkan Pilihan ForeignKey Menggunakan Penapisan QuerySet

Untuk mengehadkan pilihan untuk Kadar medan dalam borang Pelanggan kepada hanya kadar yang dikaitkan dengan syarikat yang dipilih, kami boleh mengubah suai kelas ClientForm kami seperti berikut:

Dalam kod ini, kami mendapatkan ID Syarikat daripada contoh yang dikaitkan dengan borang. Ini memastikan bahawa pilihan Kadar ditapis berdasarkan syarikat yang betul.

Nota Tambahan

  • Pendekatan ini serasi dengan Django 1.0 dan lebih baru.
  • Argumen limit_choices_to ForeignKeyField direka bentuk untuk digunakan dalam antara muka pentadbir Django dan mungkin tidak selalunya sesuai untuk digunakan dalam borang.
  • Untuk senario penapisan yang lebih kompleks, anda mungkin perlu mengatasi kaedah get_queryset bagi kelas ModelChoiceField.

Atas ialah kandungan terperinci Bagaimana untuk Menapis Pilihan ForeignKey dalam Django ModelForms?. 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