私は、Ubuntu 14.04でPython 2.7、Django 1.9.4を使用しています。__init__にパラメータを持つModelFormsフォームウィザード
私はかなりの数日の間、django-formtools(特にフォームウィザード)に苦労しています。次のようなシナリオは次のとおりです。
- 第一ステップ:
フォームウィザードは、わずか2ステップのプロセスである私がモデルに基づくのModelFormを持っています。フォームの
__init()__
には、パラメータ(整数のログインユーザーのID)が必要です。 - 第2ステップ:ユーザーにフォームを送信するかどうかを尋ねる簡単なチェックボックス。
forms.pyのソース:
from django import forms
from publishermanagement import models
from localemanagement import models as locale_models
from usermanagement import models as user_models
class AddPublisherForm(forms.ModelForm):
def __init__(self, user_id, *args, **kwargs):
super(AddPublisherForm, self).__init__(*args, **kwargs)
permitted_locale_ids = (
user_models
.PublisherPermission
.objects
.filter(user=user_id)
.values_list('locale', flat=True))
self.fields['locale'].queryset = (
locale_models
.Locale
.objects
.filter(pk__in=permitted_locale_ids))
class Meta:
model = models.Information
fields = (
'channel_type',
'current_deal_type',
'locale',
'name',
'contact_primary',
'contact_auxiliary',
'website',
'phone',
'is_active',)
class ConfirmPublisherForm(forms.Form):
confirmation = forms.BooleanField(
label="Check to confirm provided publisher data")
を私はスタックオーバーフローなど、様々なフォーラムでの提案に沿ってget_form_instance()
を上書きしました。 Information
は、AddPublisherForm
が作成されたモデルクラスです。
views.py
from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required
from publishermanagement import models as publisher_models
from formtools.wizard.views import SessionWizardView
class CreatePublisherWizard(SessionWizardView):
@login_required(login_url='/account/login/')
def done(self, form_list, **kwargs):
# code for saving form data to be done here if user confirms the data
# else redirect to the main form.
return render_to_response(
'publishermanagement/wiz.html',
{'form_data': [form.cleaned_data for form in form_list]})
def get_form_instance(self, step):
if step == u'0':
info = publisher_models.Information()
return info
# the default implementation
return self.instance_dict.get(step, None)
私はFirefoxでURLを呼び出すときただし、実行時に、私はエラー__init__() takes at least 2 arguments (1 given)
を取得しています。私がforms.pyから__init__()
を削除すると、コードは正常に動作します。
このModelFormをdjango-formtoolsでどのように作成できるかについてのアイデアは、統合されています。
いくつかの関連記事:Access Request Object in WizardView Sublcass
@Alasadirありがとうございました!それは実際に働いた! :) – Blueraaga