1

「foo」という名前のセッション変数があります。ここで、「foo」の値に応じて、cbv に特定のフォームとテンプレートをロードしたいと思います。そのため、form_class と template_name を switch ケースに入れる必要があります。

これに適した機能はどれですか? 得る?get_form? これに本当に適した場所はないように見えます。

誰か提案や別の方法を知っていますか? :)

4

3 に答える 3

1

テンプレートを変更せずに、この質問と非常によく似た要求ごとに FormView CBV の変更 ModelFormを依頼した後、私はこれとあなたの答えを見つけました

だから基本的に私はそれをすべて要約するつもりです 最初に私はデニー・クレーンによってこの答えをテストしました

class Foo(FormView):
    def dispatch(self, request, *args, **kwargs):
        self.var = request.session['sessionvar']['var']
        if self.var == some_value:
            form_class = form1
            template_name = template1
        elif self.var == another_value:
            form_class = form2
            template_name = template2
        [...]
        return super(Foo, self).dispatch(request, *args, **kwargs)

オーバーライドする必要がありました

def get_form_class(self):

def get_template_names(self):

これが機能するために、まさにテンプレート部分なしで必要なものでした。私の状況では、同じテンプレートを維持したいので、その2つの組み合わせが機能しました! しかし、私は@Serafeimコメントを縫います

注意してください - これは django の適切な使い方ではありません! 両方の関数で条件を繰り返したくない場合は、条件を含み、True/False を返す新しい関数を定義するだけです。これで、この関数は > > get_form_class と get_template_names の両方から使用できるようになりました :)

私はすべてを

このコードのみ

def get_form_class(self):
    self.step = self.request.GET.get('step') 
    # for now I am getting this with request.get, till I will get the 
    # grip on session :) my first week on django and web-dev in general 
    if not self.step:
        self.step = 'step1'
    self.form_class = FORM[self.step] #FORM = dict{'step#': ModelForm}
    return self.form_class

そして、これはすべてのおかげで有効な答えです

于 2016-10-23T08:26:08.667 に答える