【问题标题】:How to input phone numbers without the leading +1如何在没有前导 +1 的情况下输入电话号码
【发布时间】:2017-06-29 16:52:48
【问题描述】:

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

这将是他们填写的表格。

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

【问题讨论】:

  • edit您的问题并添加您的表单代码。 (如果您选择它并按 Ctrl+K 或单击 {} 按钮,它将被格式化为代码。)
  • 我没有这方面的代码,因为我没有创建 PhonNumberField。它是我安装的一个包。所有数字的开头都需要 +1。
  • 我知道它不是你创建的。但你必须在某处使用它。这就是我要的代码。
  • 我只有一个模型,其中包含该字段。你想要那个?
  • 我想了解您的用户在哪里输入电话号码。他们是通过 Django 管理员来做的吗?模型名称是什么,字段名称是什么?

标签: django phone-number


【解决方案1】:

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

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

应该这样做(我不包括整个类或导入;这只是一个示例 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2018-11-10
    相关资源
    最近更新 更多