2016-01-21 33 views
1

我有2個表單中的一個,我添加了前綴以將它分開。但我得到錯誤:__init __()得到了一個意想不到的關鍵字參數'前綴'表單錯誤 - __init __()得到了一個意想不到的關鍵字參數'前綴'

我閱讀有關前綴和其他問題的堆棧有關的文檔,但這不幫助我。

我view.py:

@user_passes_test(lambda u: u.is_staff, login_url='/account/login/') 
def client_create(request): 
    dict = {} 
    dict['title'] = 'New client' 

    if request.method == 'POST': 
     form_user = ClientUserCreateForm(request.POST, prefix="test1") 
     form_client = ClientCreateForm(request.POST, prefix="test2") 
     return HttpResponse(request.POST['first_name']) 
     # if form_user.is_valid() and form_client.is_valid(): 
     #  print(request.POST) 
    else: 
     dict['form_user'] = ClientUserCreateForm(prefix="test1") 
     dict['form_client'] = ClientCreateForm(prefix="test2") 
     return render(request, 'panel/client/create.html', dict) 

我有兩種形式,他們有初始化,當我從表單中刪除它,然後前綴工作的正確。

我forms.py

class ClientUserCreateForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ('first_name', 'last_name', 'email') 

    def __init__(self): 
     super(ClientUserCreateForm, self).__init__() 
     self.fields['first_name'].widget.attrs.update({ 
      'type': 'text', 
      'class': 'form-control', 
      'id': 'input-text', 
     }) 
     self.fields['last_name'].widget.attrs.update({ 
      'type': 'text', 
      'class': 'form-control', 
      'id': 'input-text', 
     }) 
     self.fields['email'].widget.attrs.update({ 
      'type': 'text', 
      'class': 'form-control', 
      'id': 'input-text', 
     }) 


class ClientCreateForm(forms.ModelForm): 
    country = forms.CharField(max_length=2, widget=forms.Select(
     choices=CountriesShortcut.objects.all().values_list('code', 'name').order_by('id') 
    )) 
    forwarding_country = forms.CharField(max_length=2, widget=forms.Select(
     choices=CountriesShortcut.objects.all().values_list('code', 'name').order_by('id') 
    )) 

    class Meta: 
     model = Client 
     fields = ('name', 'vat', 'address', 'zip_code', 'city', 'country', 'forwarding_address', 
        'forwarding_zip_code', 'forwarding_city', 'forwarding_country', 'phone', 
        'mailing_email', 'regon') 

    def __init__(self): 
     super(ClientCreateForm, self).__init__() 
     self.fields['name'].widget.attrs.update({ 
      'type': 'text', 
      'class': 'form-control', 
      'id': 'input-text', 
     }) 
     self.fields['vat'].widget.attrs.update({ 
      'type': 'text', 
      'class': 'form-control', 
      'id': 'input-text', 
     }) 
     (....) 
     self.fields['regon'].widget.attrs.update({ 
      'type': 'text', 
      'class': 'form-control', 
      'id': 'input-text', 
     }) 

回溯:

Environment: 

Request Method: GET 
Request URL: http://127.0.0.1:8000/panel/client/create/ 

Django Version: 1.8.8 
Python Version: 3.5.1 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'core', 
'client', 
'registration', 
'avatar', 
'filer', 
'mptt', 
'easy_thumbnails', 
'reversion', 
'guardian') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware') 


Traceback: 
File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\core\handlers\base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view 
    22.     return view_func(request, *args, **kwargs) 
File "C:\Users\loc\PycharmProjects\CRM\core\views.py" in client_create 
    72.   dict['form_user'] = ClientUserCreateForm(prefix="test1") 

Exception Type: TypeError at /panel/client/create/ 
Exception Value: __init__() got an unexpected keyword argument 'prefix' 

回溯2 - 更新後__init__:

Environment: 

Request Method: GET 
Request URL: http://127.0.0.1:8000/panel/client/create/ 

Django Version: 1.8.8 
Python Version: 3.5.1 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'core', 
'client', 
'registration', 
'avatar', 
'filer', 
'mptt', 
'easy_thumbnails', 
'reversion', 
'guardian') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware') 


Traceback: 
File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\core\handlers\base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view 
    22.     return view_func(request, *args, **kwargs) 
File "C:\Users\loc\PycharmProjects\CRM\core\views.py" in client_create 
    73.   dict['form_client'] = ClientCreateForm(prefix="test2") 
File "C:\Users\loc\PycharmProjects\CRM\core\forms.py" in __init__ 
    75.   super(ClientUserCreateForm, self).__init__(*args, **kwargs) 

Exception Type: TypeError at /panel/client/create/ 
Exception Value: super(type, obj): obj must be an instance or subtype of type 
+0

您可以發佈完整的stacktrace嗎? –

回答

5

您正在重寫表單的__init__方法,並且您不接受新方法中的任何參數。這是最容易接受並通過所有參數:

ClientUserCreateForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(ClientUserCreateForm, self).__init__(*args, **kwargs) 
+0

super(type,obj):obj必須是來自行的實例或子類型:dict ['form_client'] = ClientCreateForm(prefix =「test2」) - 我現在需要添加數據屬性? – Thaian

+0

你可以發佈新的代碼/追溯? – knbk

+0

對於第二次追蹤:在ClientCreateForm中,您必須使用ClientCreateForm調用super。你有'super(ClientUserCreateForm,self)'。 – Alasdair

相關問題