저는 파이썬 2.7, Django 1.9.4를 Ubuntu 14.04에서 사용하고 있습니다.__init__에 매개 변수가있는 ModelForms가있는 폼 마법사
저는 며칠 동안 django-formtools (특히 폼 마법사)를 사용하여 고심하고 있습니다. 다음과 같은 시나리오는 다음과 같습니다
- 1 단계 :
양식 마법사는 단지 2 단계 프로세스 나는 모델을 기반으로 ModelForm 있습니다. 양식
__init()__
에는 매개 변수 (정수로 로그인 한 사용자의 ID)가 필요합니다. - 두 번째 단계 : 사용자에게 양식을 제출할 것을 요청하는 간단한 확인란입니다. 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 나는 파이어 폭스에서 URL을 호출 할 때
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)
그러나, 실행시, I 오류 __init__() takes at least 2 arguments (1 given)
을 얻고있다. 내 forms.py에서 __init__()
을 제거하면 코드가 올바르게 실행됩니다.
그리고 django-formtools에서이 ModelForm을 어떻게 만들 수 있는지에 대한 아이디어가 통합되었습니다.
일부 관련 게시물 : Access Request Object in WizardView Sublcass
감사합니다. @Alasadir! 그것은 정말로 효과가 있었다! :) – Blueraaga