问题描述
我正在尝试将excel文件导入到我的django项目中,并使用excel的数据创建一个Client对象。
这是我的客户模型:
class Client(models.Model):
client = models.CharField(max_length=255,null=False)
name = models.CharField(max_length=255,blank=True,null=True)
surname = models.CharField(max_length=255,null=True)
email = models.EmailField(blank=True,null=True)
phone = PhoneNumberField(blank=True,null=True)
import phonenumbers
def import_proj_excel(request):
if request.method == 'POST':
client_resource = ClientResource()
dataset = Dataset()
file = request.FILES['prog-file']
if not file.name.endswith('xlsx'):
messages.info(request,'invalid format')
return render(request,'excel.html')
imported_data = dataset.load(file.read(),format='xlsx')
for data in imported_data:
if data[1] is None or data[2] is None or data[3] is None or data[4] is None or data[4] is None or data[5] is None:
d1 = data[1]
d2 = data[2]
d3 = data[3]
d4 = data[4]
d5 = data[5]
if d1 is None:
d1 = ""
elif d2 is None:
d2 = ""
elif d3 is None:
d3 = ""
elif d4 is None:
d4 = ""
elif d5 is None:
d5 = str(data[5])
d5 = ""
value = Cliente(
data[0],d1,d2,d3,d4,d5,)
else:
phone = phonemubers(data[5])
print(type(phone))
value = Client(
data[0],data[1],data[2],data[3],data[4],phone,)
value.save()
return render(request,'excel.html')
data [0]是ID
数据[1]是客户端
数据[2]是名称
数据[3]是姓
数据[4]是电子邮件
数据[5]是电话号码
我做到了:
if data[1] is None or data[2] is None or data[3] is None or data[4] is None or data[4] is None or data[5] is None:
因为当excel中的一个字段为空时,我不想在对象字段中显示None,但是我想要一个空字符串。
无论如何我都会得到错误: 无法将int转换为PhoneNumber。
引发TypeError(“无法将%s转换为电话号码。”%类型(值)。名称)
有人知道如何解决吗?
解决方法
您要插入的电话号码似乎无效。这可能是由于电话号码格式与您指定的区域不匹配(如果您已指定区域)或电话号码未格式化为电话号码实例(例如“ +41524204242”) 在这里解释:https://pypi.org/project/django-phonenumber-field/
您可以看到验证尝试,包括您在此处看到的错误:
很难说没有在Excel文件中看到数据,但是我的猜测是Excel文件中的电话号码没有按照“电话号码”字段所期望的格式进行格式化。