2016-07-14 5 views
0

Я новичок в DJango, и я пытаюсь заполнить форму поля выбора с помощью пользовательских данных, но я получаю сообщение об ошибке, которое я плохо понимаю.Невозможно заполнить форму пользовательского поля выбора на Django

На мой views.py у меня есть:

def simpleDeploy(request): 
    networkList = getDetailsNetworkPartitions(request) 
    policiesList = getDetailsApplicationPolicies(request) 
    if request.method == 'POST': 
     abs(5) #Don't do nothing by the moment, I need put something or I get an error 
    else: 
     simpleForm = SimpleDeploy(netList=networkList, polList=policiesList) 
    return render(request, 'apacheStratos/simpleDeploy.html', {'form': simpleForm}) 

И мой forms.py является:

class SimpleDeploy(forms.Form): 
    def __init__(self, networkList, policiesList, *args, **kwargs): 
     super(SimpleDeploy, self).__init__(*args, **kwargs) 
     if networkList and policiesList: 
      self.fields['networkPartitions'] = forms.ChoiceField(choices=networkList) 
      self.fields['applicationPolicies'] = forms.ChoiceField(choices=policiesList) 
     else: 
      self.fields['networkPartitions'] = forms.ChoiceField(choices='No network partitions found') 
      self.fields['applicationPolicies'] = forms.ChoiceField(choices='No application policies found') 

Ошибка, которая Django бросает это: __init__() takes at least 3 arguments (1 given) на линии simpleForm = SimpleDeploy(netList=networkList, polList=policiesList)

Я не знаю, почему говорит, что принимает 3 аргумента и дает 1, если я прохожу 2.

Что я делаю неправильно? Благодарю.

отредактирован PUT ОШИБКУ И TraceBack:

Ошибка:

TypeError at /stratos/simpleDeploy 

__init__() takes at least 3 arguments (1 given) 

Request Method:  GET 
Request URL: http://127.0.0.1:8000/stratos/simpleDeploy 
Django Version:  1.8.12 
Exception Type:  TypeError 
Exception Value:  

__init__() takes at least 3 arguments (1 given) 

Exception Location:  /home/iago/Escritorio/tfm/website/apacheStratos/views.py in simpleDeploy, line 60 
Python Executable: /usr/bin/python2.7 
Python Version:  2.7.6 
Python Path:  

['/home/iago/Escritorio/tfm/website', 
'/usr/local/lib/python2.7/dist-packages/Django-1.8.12-py2.7.egg', 
'/home/iago/Escritorio/tfm/website', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PILcompat', 
'/usr/lib/python2.7/dist-packages/gtk-2.0', 
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client'] 

Server time: Thu, 14 Jul 2016 11:39:42 +0000 

Traceback:

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/stratos/simpleDeploy 

Django Version: 1.8.12 
Python Version: 2.7.6 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'contact', 
'menu', 
'catalog', 
'apacheStratos') 
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 "/usr/local/lib/python2.7/dist-packages/Django-1.8.12-py2.7.egg/django/core/handlers/base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/iago/Escritorio/tfm/website/apacheStratos/views.py" in simpleDeploy 
    60.   simpleForm = SimpleDeploy(netList=networkList, polList=policiesList) 

Exception Type: TypeError at /stratos/simpleDeploy 
Exception Value: __init__() takes at least 3 arguments (1 given) 
+0

Просьба показать полную информацию о трассе. –

+0

Привет, Даниэль, я обновил свой вопрос с информацией. – Aker666

ответ

2

Похоже, что вы использовали другой ключ, и позиционные аргументы отсутствуют. Аргументы, которые вы отправляете, считаются kwargs.

В __init__ вы ожидаете следующие аргументы форме в

def __init__(self, networkList, policiesList, *args, **kwargs): 

Но вы посылаете его с ключами netList и polList Отсюда возникает ошибка.

Try:

simpleForm = SimpleDeploy(networkList=netList, policiesList=polList) 

Или даже просто

simpleForm = SimpleDeploy(netList, polList) 

Обратите внимание, что я не знаю, что ваши имена локальных переменных, поэтому обновлять их соответствующим образом.

+0

О, кажется, работает !!! Благодарю. Но я получаю: слишком много значений, чтобы распаковать ошибку на {form.as_table}} во время рендеринга шаблона. Зачем? Если это выбор, он должен принять список строк с выборами. Или я ошибаюсь. – Aker666

+0

Я предполагаю, что проблема в том, что она ожидает список кортежей. Возможно, вы захотите изучить формат поля выбора. Форматы django ожидают, что он будет в – karthikr

+0

А, ок. Я увижу. Благодаря! – Aker666

 Смежные вопросы

  • Нет связанных вопросов^_^