4

フォーム ウィザードのドキュメントによると、初期データは静的辞書である必要があります。しかし、初期データを動的に提供することは可能ですか?

これが私の状況です:

 def get_context_data(self, form, **kwargs):
    context = super(debugRegistrationWizard, self).get_context_data(form=form, **kwargs)
    email = InvitationKey.objects.get_key_email(self.kwargs['invitation_key'])
    context.update({'invitation_key': self.kwargs['invitation_key']})
    return context

ステップ 0 で初期データとして必要なのがメールですが、このメールは get_context_data メソッドでしか取得できません。どうやってやるの?

ちなみに、formwizard.as_view の urlconf が次のような引数を受け入れる場合:

url(r'^registration/(?P<invitation_key>\w+)$', debugRegistrationWizard.as_view(FORMS)),

フォームのアクション属性に変数を渡す必要があるということですか。そうしないと、フォームを送信すると、見つからない URL エラーが発生します。

4

2 に答える 2

6

メソッドをオーバーライドできますget_form_initial

def get_form_initial(self, step):
    initial = self.initial_dict.get(step, {})
    if step == 42:
        email = InvitationKey.objects.get_key_email(self.kwargs['invitation_key'])
        initial.update({'email': email})
    return initial

参照: https://django-formtools.readthedocs.io/en/latest/wizard.html#formtools.wizard.views.WizardView.get_form_initial

于 2013-05-11T07:24:50.863 に答える
3

最初の答えはほとんどそこにあります。をオーバーライドする必要がありますget_form_initial(self.kwargs少なくとも Django formtools の最新バージョンでは)リクエストの GET または POST パラメーターが含まれていません。

self.requestソリューションは非常に簡単です。 はウィザードの属性であるため、リクエストから値を直接参照するだけです。

def get_form_initial(self, step):
    initial = self.initial_dict.get(step, {})
    invitation_key = self.request.GET.get("invitiation_key")
    email = InvitationKey.objects.get_key_email(invitation_key)
    initial.update({'email': email})
    return initial
于 2015-12-04T02:07:27.160 に答える