首页 文章

Django - 必须是unicode,而不是None

提问于
浏览
0

我生成一个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)

我能做什么?我试着检查值是否为none并返回“value =”none“”但它显示此错误,“必须是unicode not str”traceback:

环境:请求方法: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')Traceback:File“/ home / eloy / jet_dev / local / lib / get_response 111中的python2.7 / site-packages / django / core / handlers / base.py“ . response = wrapped_callback(request,* callback_args,** callback_kwargs)File”/ home / elo y / jet_dev / local / lib / python2.7 / site-packages / django / utils / decorators.py“in _wrapped_view 105. response = view_func(request,* args,** kwargs)File”/ home / eloy / jet_dev / _wrapped_view_func中的local / lib / python2.7 / site-packages / django / views / decorators / cache.py“52 . response = view_func(request,* args,** kwargs)File”/ home / eloy / jet_dev / local /内部204中的lib / python2.7 / site-packages / django / contrib / admin / sites.py“返回视图(请求,* args,** kwargs)文件”/home/eloy/jet/currier/admin.py “在descargar_clientes 126. encode_notnull(normalize('NFKD',client.profesion).encode('ascii','ignore'))或”“,异常类型:TypeError at / admin / descargar_clientes异常值:必须是unicode,而不是没有

1 回答

  • 4

    你的作者只期待字符串,你显然发送了一个 None ,这是问题的原因 .

    要覆盖它,请更改

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

    client.celular or ""
    

    这样,如果 client.celular 的计算结果为 None ,则 writerow 收到的值是 "" ,它仍然是一个字符串 . 或者 u"" 如果你想让它成为unicode .

相关问题