Django モデルでは、ForeignKey は 2 つのモデル間の関係を定義します。このドキュメントでは、Django ModelForm のForeignKey フィールドで使用可能な選択肢をフィルタリングして、関連するオプションのみが表示されるようにする方法を示します。
指定されたシナリオでは、次のことを目的としています。特定の会社に関連するクライアントを追加するためのフォーム。クライアントのbase_rateForeignKeyには、問題の会社に関連付けられたレートのみが表示される必要があります。 Django 1.0 でこれを実現するには、次の手順に従います。
form.fields["base_rate"].queryset = Rate.objects.filter(company_id=the_company.id)
このクエリセットにより、選択した会社に関連するレートのみが選択肢として利用可能になります。 form.
Django 0.96 用に投稿されたソリューションは、確かに Django フォームのネイティブ機能をバイパスするハックです。これは、ForeignKey フィールドの Choices 属性を直接変更するため、不整合が生じる可能性があり、運用コードには推奨されません。
Django のドキュメントには、ModelChoiceField の選択肢が次によって定義されると明確に記載されています。そのクエリセット属性。この属性を適切な QuerySet に明示的に設定することで、オブジェクトの目的のサブセットに合わせて外部キーの選択を調整できます。この方法により、ハッキングが回避され、クリーンで保守可能なアプローチが保証されます。
以上がDjango ModelForm でForeignKey の選択肢をフィルタリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。