【问题标题】:Django - must be unicode, not NoneDjango - 必须是 unicode,而不是 None
【发布时间】:2015-02-10 16:26:36
【问题描述】:

我正在生成一个 csv 文件,在我的数据库的某些字段中是空的,当我创建 csv 文件时,此错误显示“必须是 unicode,而不是无”

这就是我正在做的事情

def encode_notnull(field):
    if field:
        field.encode("utf-8")
    return field

clients = Usuario.objects.all()
    for client in clients:
        row = [
                client.casillero,
                client.pk,
                encode_notnull(client.tipo_rif),
                encode_notnull(client.rif),
                encode_notnull(client.razon_social),
                '',
                client.fecha_registro,
                encode_notnull(client.direccion_fiscal),
                client.codigo_telf_empresa,
                client.telf_empresa,
                client.codigo_fax_empresa,
                client.fax_empresa,
                client.correo_empresa,
                client.web,
                client.tipo_cedula,
                client.cedula,
                encode_notnull(normalize('NFKD', client.user.last_name).encode('ascii', 'ignore')),
                encode_notnull(normalize('NFKD', client.user.first_name).encode('ascii', 'ignore')),
                client.fecha_nacimiento,
                encode_notnull(normalize('NFKD', client.profesion).encode('ascii', 'ignore')),
                encode_notnull(normalize('NFKD', client.pais).encode('ascii', 'ignore')),
                encode_notnull(normalize('NFKD', client.estado).encode('ascii', 'ignore')),
                encode_notnull(normalize('NFKD', client.ciudad).encode('ascii', 'ignore')),
                encode_notnull(normalize('NFKD', client.urbanizacion).encode('ascii', 'ignore')),
                client.codigo_postal,
                encode_notnull(normalize('NFKD', client.avenida).encode('ascii', 'ignore')),
                client.codigo_telefono,
                client.telefono,
                encode_notnull(normalize('NFKD', client.tipo_inmueble).encode('ascii', 'ignore')),
                encode_notnull(normalize('NFKD', client.inmueble).encode('ascii', 'ignore')),
                client.codigo_celular,
                client.celular,
                client.codigo_fax,
                client.fax,
                encode_notnull(normalize('NFKD', client.user.email).encode('ascii', 'ignore')),
                encode_notnull(normalize('NFKD', client.user.username).encode('ascii', 'ignore')),
                encode_notnull(normalize('NFKD', client.user.password).encode('ascii', 'ignore')),
                encode_notnull(client.status),
                encode_notnull(client.tipo_cliente),
                client.autorizado,
                client.jet_info,
                encode_notnull(client.observaciones),
                encode_notnull(client.codigo_empresa),
                encode_notnull(client.cargo),
                encode_notnull(client.sexo),
                encode_notnull(client.departamento),
                client.celular,#decia cedularl ???
                '',
                '',
                '',
                encode_notnull(client.tomo),
                client.ano,
                client.representante_legal,
                encode_notnull(client.plan_inscripcion),
                client.numero_afiliado,
                encode_notnull(client.referido),
                ''
            ]

        writer.writerow(row)

我能做什么?我尝试检查该值是否为无并返回“value =”none“”但它显示此错误,“必须是 unicode 而不是 str” 追溯:

环境:

请求方法:GET 请求 URL: http://127.0.0.1:8000/admin/descargar_clientes

Django 版本:1.7.1 Python 版本:2.7.6 已安装的应用程序: ('django.contrib.admin.apps.SimpleAdminConfig', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles'、'adminplus'、'clients'、'currier') 已安装的中间件: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware')

追溯:文件 “/home/eloy/jet_dev/local/lib/python2.7/site-packages/django/core/handlers/base.py” 在 get_response 111. response = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件“/home/eloy/jet_dev/local/lib/python2.7/site-packages/django/utils/decorators.py” 在 _wrapped_view 105. response = view_func(request, *args, **kwargs) 文件“/home/eloy/jet_dev/local/lib/python2.7/site-packages/django/views/decorators/cache.py” 在 _wrapped_view_func 52. response = view_func(request, *args, **kwargs) 文件“/home/eloy/jet_dev/local/lib/python2.7/site-packages/django/contrib/admin/sites.py” 在内部 204. return view(request, *args, **kwargs) 文件 "/home/eloy/jet/currier/admin.py" in descargar_clientes 126. encode_notnull(normalize('NFKD', client.profesion).encode('ascii', 'ignore')) or "",

异常类型:TypeError at /admin/descargar_clientes 异常 值:必须是 unicode,而不是 None

【问题讨论】:

    标签: python django csv unicode


    【解决方案1】:

    您的作者只需要字符串,而您显然是在向其发送None,这是导致问题的原因。

    要覆盖它,请更改

     client.celular #for example, assuming this is the line the error occurs
    

    client.celular or ""
    

    这样,如果client.celular 计算结果为None,则writerow 接收的值是"",它仍然是一个字符串。或 u"" 如果您希望它是 unicode。

    【讨论】:

    • 所以,我向您展示的是一个示例。看起来client.professionNone
    • 我试过这个 encode_notnull(normalize('NFKD', client.profesion).encode('ascii', 'ignore')) 或 "",并且 encode_notnull(normalize('NFKD', client.专业或 "").encode('ascii', 'ignore')),确实有效
    • 哥们,不工作对你我都没有多大帮助。你有没有尝试做print client.profesion,并打印函数调用的输出等???
    • 嗯,它打印“无”
    • 正是正确的问题。这意味着如果该值不存在,则不应调用该函数。
    猜你喜欢
    • 2023-03-09
    • 2017-01-12
    • 1970-01-01
    • 2020-07-11
    • 2014-10-31
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多