django - 类型 'NoneType' 的参数不可使用 ModelForm 进行迭代

标签 django

我在尝试提交表单时收到以下错误:

“NoneType”类型的参数不可迭代

我的表单类如下:

class requestform(ModelForm):
def __init__(self, *args, **kwargs):
    super(requestform, self).__init__(*args,**kwargs)
    self.is_update=False
requestedpart = forms.CharField (label="Requested Part", max_length=80, required= True)
librarytype = forms.TypedChoiceField (label="Type", choices = ((1, "Type1"), (2, "Type2"), (3, "Type3")), coerce = lambda x: bool(int(x)), widget = forms.RadioSelect, required= True)
requestformat = forms.TypedChoiceField (label="Format", choices = ((1, "Format1"), (2, "Format2")), coerce = lambda x: bool(int(x)), widget = forms.RadioSelect, required= True)
def clean(self):
    if 'requestedpart' not in self.cleaned_data:
        return
    if not self.is_update:
        return self.cleaned_data
class Meta:
    model = LibraryRequest

我的观点如下

if request.method == "POST":
    formtoaddrequest = requestform(request.POST, request.FILES)
    if requestform.is_valid(formtoaddrequest):
        new_request = formtoaddrequest.save(commit=False)
        new_request.requestadder = request.user 
        new_request.save()
        request.user.message_set.create(message=_("You have saved '%(requestedpart)s'") %  {'requestedpart': new_request.requestedpart})

这是我的回溯

Traceback:
File "/Users/AB/Desktop/myenv2/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  100.                     response = callback(request, *callback_args, **callback_kwargs)
File "/Users/AB/Desktop/store/project/views.py" in view_requests
  201.          if formtoaddmodel.is_valid():
File "/Users/AB/Desktop/myenv2/lib/python2.7/site-packages/django/forms/forms.py" in is_valid
  121.         return self.is_bound and not bool(self.errors)
File "/Users/AB/Desktop/myenv2/lib/python2.7/site-packages/django/forms/forms.py" in _get_errors
  112.             self.full_clean()
File "/Users/AB/Desktop/myenv2/lib/python2.7/site-packages/django/forms/forms.py" in full_clean
  269.         self._post_clean()
File "/Users/AB/Desktop/myenv2/lib/python2.7/site-packages/django/forms/models.py" in _post_clean
  316.         self.instance = construct_instance(self, self.instance, opts.fields, opts.exclude)
File "/Users/AB/Desktop/myenv2/lib/python2.7/site-packages/django/forms/models.py" in construct_instance
  40.                 or not f.name in cleaned_data:

Exception Type: TypeError at /project/view_requests/
Exception Value: argument of type 'NoneType' is not iterable

知道为什么我可能会收到此错误吗?

最佳答案

存在多个问题。

您的 clean 方法应该引发 ValidationError 或返回 self.cleaned_data。您的 clean() 方法不会引发错误,但返回 None,更改如下:

def clean(self):
    if self.cleaned_data and 'requestedpart' not in self.cleaned_data:
        raise forms.ValidationError("Some error message")
    if not self.is_update:
        return self.cleaned_data
    return self.cleaned_data

同样,如果字段 fieldname 具有 clean_fieldname,则返回其值:

def clean_fieldname(self):
    # ...
    return self.cleaned_data['fieldname']

您还可以检查self.cleaned_data是否为非空

在您看来,表单验证应该类似于: if requestform.is_valid() 即。没有参数。

关于django - 类型 'NoneType' 的参数不可使用 ModelForm 进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12301248/

相关文章:

django - 如何构建docker镜像以引用venv中的python库

django - 如何知道 Django 中的数据库何时准备就绪?

python - 使用 LocMemCache 进行选择性 Django pytest

html - 如何制作水平导航栏?

python - Django 和 "Ordinary"Python 类成员和实例成员的区别?

python - uWSGI Empire 模式无法在 Virtualenv 之外工作

python - 带有反向引用的 Django 查询集过滤器

Python 类覆盖

python - NoReverseMatch - Django 1.7 初学者教程

python - Django 对与同一模型相关的多个字段进行注释