如何在没有前导 +1 的情况下输入 phone 个数字

How to input phone numbers without the leading +1

在 django 的 PhoneNumber 字段中,如何允许用户输入 phone 开头没有前导 +1 的号码?

这将是他们填写的表格。

class Phone(models.Model):
    name = models.CharField(max_length=30)
    phoneNumber = PhoneNumberField()

看起来您的用户正在使用 Django 管理员。

首先,使用自定义 clean_<fieldname> 方法创建一个 form for your model,在存储之前将号码解析为 E.164 格式。

应该这样做(我没有包括整个 class 或导入;这只是一个示例 clean_ 方法):

def clean_phoneNumber(self):
    phone_number = self.cleaned_data['phoneNumber']

    # Replace 'US' with whatever type of number it is
    # See https://github.com/daviddrysdale/python-phonenumbers
    parsed_number = phonenumbers.parse(phone_number, 'US')

    return phonenumbers.format_number(
        parsed_number,
        phonenumbers.PhoneNumberFormat.E164,
    )

然后为您的模型创建一个 model admin class 并将其 form 设置为您刚刚创建的表单。

旁白:考虑使用 phone_number 而不是 phoneNumber。这更惯用。参见 PEP 8