Я занимаюсь тем, как создать пользовательскую форму в Django, и теперь я застрял на этапе отправки.
Когда я нажимаю отправить, я получаю __init__() got multiple values for keyword argument 'networkList'
.
My forms.py
it's:
class SimpleDeploy(forms.Form):
def __init__(self, networkList, policiesList, applicationList, *args, **kwargs):
super(SimpleDeploy, self).__init__(*args, **kwargs)
if networkList and policiesList and applicationList:
self.fields['Network Partition ID:'] = forms.ChoiceField(choices=networkList)
self.fields['Application Policy ID:'] = forms.ChoiceField(choices=policiesList)
self.fields['Application ID:'] = forms.ChoiceField(choices=applicationList)
else:
self.fields['Network Partition ID:'] = forms.ChoiceField(choices='No network partitions found')
self.fields['Application Policy ID'] = forms.ChoiceField(choices='No application policies found')
self.fields['Application ID:'] = forms.ChoiceField(choices='No applications found')
На моем views.py
метод выглядит так:
def simpleDeploy(request):
netList = getDetailsNetworkPartitions(request)
polList = getDetailsApplicationPolicies(request)
appList = getDetailsApplications(request)
if request.method == 'POST':
form = SimpleDeploy(request.POST, networkList=None, policiesList=None, applicationList=None)
if form.is_valid():
network = form.cleaned_data['Network Partition ID:']
policy = form.cleaned_data['Application Policy ID:']
application = form.cleaned_data['Application ID:']
##### more things
else:
simpleForm = SimpleDeploy(networkList=netList, policiesList=polList, applicationList=appList)
else:
simpleForm = SimpleDeploy(networkList=netList, policiesList=polList, applicationList=appList)
return render(request, 'apacheStratos/simpleDeploy.html', {'form': simpleForm})
Ошибка трассировки:
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. form = SimpleDeploy(request.POST, networkList=None, policiesList=None, applicationList=None)
Exception Type: TypeError at /stratos/simpleDeploy
Exception Value: __init__() got multiple values for keyword argument 'networkList'
Глядя на документ, я прочитал, что запрос POST это всегда первый параметр (request.Post
), а в методе инициализации я думаю, что он соответствует self
, более того, на других ответах здесь я видел, что иногда установка data=params
работает, но в моем случае я получить ошибку: need more than 1 value to unpack
в строке if form.is_valid():
Проследить:
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
61. if form.is_valid():
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.12-py2.7.egg/django/forms/forms.py" in is_valid
184. return self.is_bound and not self.errors
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.12-py2.7.egg/django/forms/forms.py" in errors
176. self.full_clean()
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.12-py2.7.egg/django/forms/forms.py" in full_clean
392. self._clean_fields()
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.12-py2.7.egg/django/forms/forms.py" in _clean_fields
407. value = field.clean(value)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.12-py2.7.egg/django/forms/fields.py" in clean
163. self.validate(value)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.12-py2.7.egg/django/forms/fields.py" in validate
868. if value and not self.valid_value(value):
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.12-py2.7.egg/django/forms/fields.py" in valid_value
878. for k, v in self.choices:
Exception Type: ValueError at /stratos/simpleDeploy
Exception Value: need more than 1 value to unpack
Итак, в чем моя ошибка? Спасибо и привет.