我生成一个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 回答
你的作者只期待字符串,你显然发送了一个
None
,这是问题的原因 .要覆盖它,请更改
至
这样,如果
client.celular
的计算结果为None
,则writerow
收到的值是""
,它仍然是一个字符串 . 或者u""
如果你想让它成为unicode .