Django ModelForm によるForeignKey の選択のフィルタリング
概要
Django でフォームを作成する場合、次のことができます。特定の基準に基づいて、特定のフィールドについてユーザーに提示される選択肢を制限することが望ましい。これは、外部キーを選択する場合など、階層データが関係するシナリオで特に役立ちます。
ケース スタディ: ModelForm でのForeignKey 選択肢の選択
仮説を考えてみましょう。次のモデルを使用した Django プロジェクト:
class Company(models.Model): name = ... class Rate(models.Model): company = models.ForeignKey(Company) name = ... class Client(models.Model): name = ... company = models.ForeignKey(Company) base_rate = models.ForeignKey(Rate)
この場合、各企業は複数のモデルを持っています。料金も顧客も。各クライアントは、別の会社のレートではなく、親会社のレートから選択された基本レートを持つ必要があります。
QuerySet フィルタリングを使用した外部キーの選択肢の制限
レートの選択肢を制限するにはClient フォームのフィールドを、選択した会社に関連付けられた料金のみに設定するには、ClientForm クラスを次のように変更できます。
class ClientForm(ModelForm): class Meta: model = Client fields = ['name', 'base_rate'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['base_rate'].queryset = Rate.objects.filter(company_id=self.instance.company_id)
このコードでは、フォームに関連付けられたインスタンスから会社 ID を取得します。これにより、レートの選択肢が正しい会社に基づいてフィルターされるようになります。
追加メモ
以上がDjango ModelForms でForeignKey の選択肢をフィルタリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。