【问题标题】:Type error cannot concatenate 'str' and 'ErrorList' objectsTypeerror 不能连接 'str' 和 'Error List' 对象
【发布时间】:2014-03-29 14:23:25
【问题描述】:

我的代码

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

【问题讨论】:

  • 这是什么上下文?

标签: python django python-2.7


【解决方案1】:

Django form.errors 是一个字典,键是字段名,值是表示错误消息的 Unicode 字符串的 lists。错误信息存储在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))})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多