1

私は自分が望むものに最適なアプローチを見つけようとしています。そして、私はそのためにいくつかの助けを使うことができます.

モデル A とモデル B があります。モデル B は

modela = forms.ForeignKey(Model a)

同じページで単一のモデル A と複数のモデル B の両方を編集できるビューを作成したいと考えています。Django にはこのためのフォームセットがあり、うまく機能します。

ただし、細部が 1 つあります。つまり、同じオブジェクトの以前のフィールドで行った選択に基づいて、ウィジェットまたはモデル B フィールドを異なるものにしたいと考えています。- タイプに基づいて、ウィジェットは日時ピッカー入力またはプレーンテキスト入力である必要があります。

モデル B は次のようになります。

class ModelB(models.Model):
    m0odela = models.ForeignKey(ModelA)
    target_value = models.CharField()
    target_type = models.CharField( choices = ( there are choices))
    target_threshold = models.CharField()

formset に独自のフォームを提供できることを知っており、そのフォームでこのウィジェットの割り当てを行うことができます。

しかし問題は、フォームセットにインスタンス/クエリセットがない場合、フォームインスタンスに「target_type」が設定されているかどうかを確認できないことです。したがって、フォームの self.data または self.initial に基づいて行う必要があります。しかし、 self.initial も存在しませんform.__init__()。私が扱うことができるのはself.dataですが、それは生のrequest.POSTまたはrequest.GETデータであり、「mymodelb_set-0-target_type」のようなすべてのキーが含まれています。

だから私はここで少し迷っています。キーの解析を行って、どの -target_type が現在のフォームに属しているかを把握し、そこで選択された値を取得して、この値に基づいてウィジェットを割り当てる必要がありますか? または、BaseInlineFormSet の独自のサブクラスを作成し、そこで _construc_form をオーバーライドする必要がありますか? したがって、そのフォームには **kwargs の関連データを持つ初期キーがあります。

誰かが以前にこの種の問題に遭遇したことがありますか?

アラン

4

1 に答える 1