提交ChoiceField表单Djang

2024-05-08 04:58:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理如何用Django制作一个自定义表单,现在我被困在提交步骤上了。在

当我按submit时,我得到一个__init__() got multiple values for keyword argument 'networkList'。在

我的forms.py是:

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上,该方法如下所示:

^{pr2}$

回溯错误:

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'

看了看doc,我看到POST请求总是第一个参数(request.Post),在init方法中,我认为它与self相对应,此外,在这里的其他答案中,我发现有时,将data=params放在if form.is_valid():行上need more than 1 value to unpack

回溯:

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

那么,我的错误在哪里?谢谢和问候。在


Tags: djangoinpyselffieldsvalueegglib
1条回答
网友
1楼 · 发布于 2024-05-08 04:58:28

您已经定义了form init,因此第一个位置参数是networkList;因此,当您使用form = SimpleDeploy(request.POST, networkList=None...)时,位置参数和关键字arg都使用相同的名称,这是不允许的。在

根本不要更改签名;从kwargs获取额外的值。在

def __init__(self, *args, **kwargs):
    networkList = kwargs.pop('networkList', None)
    policiesList = kwargs.pop('policiesList', None)
    applicationList = kwargs.pop('applicationList', None)
    super(...)

另外,由于您只需要表单中的值,所以可以考虑将请求传递给此方法并直接在那里获取这些值;同样的语法也适用。在

相关问题 更多 >