类型错误:无法连接'str'和'ErrorList'对象
我的代码
def is_valid(self):
form = super(UserCreateForm, self).is_valid()
for f, error in self.errors.iteritems():
if f != '__all_':
self.fields[f].widget.attrs.update({'class': 'error', 'value': strip_tags(error)})
return form
错误追踪信息
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
114. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/saurabh/Desktop/project/ribbit/ribbit_app/views.py" in signup
48. if user_form.is_valid():
File "/home/saurabh/Desktop/project/ribbit/ribbit_app/forms.py" in is_valid
18. self.fields[f].widget.attrs.update({'class': 'error', 'value': strip_tags(error)})
File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py" in wrapper
203. return func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/html.py" in strip_tags
134. s.feed(value)
File "/usr/lib/python2.7/HTMLParser.py" in feed
113. self.rawdata = self.rawdata + data
Exception Type: TypeError at /signup
Exception Value: cannot concatenate 'str' and 'ErrorList' objects
1 个回答
1
Django中的form.errors是一个字典,字典里的键是字段名,值是一个包含错误信息的lists
,这些错误信息是Unicode字符串。之所以用lists
来存储错误信息,是因为一个字段可能会有多个错误信息:
>>> f.errors
{'sender': ['Enter a valid email address.'], 'subject': ['This field is required.']}
而strip_tags(value)获取的值是string
类型,但你传给它的是一个list
对象:
def is_valid(self):
form = super(UserCreateForm, self).is_valid()
for f, error in self.errors.iteritems():
# Here `error` is a list of errors for `f` field. (may be one or more)
if f != '__all_':
self.fields[f].widget.attrs.update({'class': 'error', 'value': strip_tags(error)})
return form
所以你需要修改这一行:
self.fields[f].widget.attrs.update({'class': 'error', 'value': strip_tags(error)})
改成:(只获取第一个错误)
self.fields[f].widget.attrs.update({'class': 'error', 'value': strip_tags(error[0])})
或者改成:(获取所有错误)
self.fields[f].widget.attrs.update({'class': 'error', 'value': strip_tags(", ".join(error))})