Django ModelForms でForeignKey の選択肢をフィルタリングする方法は?

Mary-Kate Olsen
リリース: 2024-11-16 10:38:03
オリジナル
210 人が閲覧しました

How to Filter ForeignKey Choices in Django ModelForms?

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 1.0 以降と互換性があります。
  • ForeignKeyField の limit_choices_to 引数は、Django 管理インターフェイス内で使用するように設計されており、使用できない場合があります。常にフォームでの使用に適しています。
  • より複雑なフィルタリング シナリオの場合は、ModelChoiceField クラスの get_queryset メソッドをオーバーライドする必要がある場合があります。

以上がDjango ModelForms でForeignKey の選択肢をフィルタリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート