【问题标题】:PYTHON CONVERT INT into PHONE NUMBERPython 将 INT 转换为电话号码
【发布时间】:2023-10-15 00:08:01
【问题描述】:

我正在尝试将一个 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, blank=True, 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] 是电子邮件

data[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。

raise TypeError("Can't convert %s to PhoneNumber." % type(value).name)

有人知道怎么解决吗?

【问题讨论】:

    标签: python django import-from-excel python-phonenumber


    【解决方案1】:

    您尝试插入的电话号码似乎无效。这可能是由于电话号码格式与您指定的区域不匹配(如果您已指定区域)或电话号码未格式化为电话号码实例(例如“+41524204242”) 在这里解释:https://pypi.org/project/django-phonenumber-field/

    您可以看到验证尝试,包括您在此处看到的错误:

    https://github.com/stefanfoulis/django-phonenumber-field/blob/master/phonenumber_field/phonenumber.py

    很难说没有看到 Excel 文件中的数据,但我猜 Excel 文件中的电话号码的格式不符合电话号码字段的预期格式。

    【讨论】: