我在模型中存储一个电话号码,就像这样:

phone_number = models.CharField(max_length=12)

用户将输入一个电话号码,我将使用该电话号码进行SMS身份验证。该应用程序将被全局使用。所以我还需要国家代码。CharField是存储电话号码的好方法吗?以及,我如何验证电话号码?


当前回答

这完全取决于你对电话号码的理解。电话号码是国家特有的。一些国家的本地风味包包含他们自己的“电话号码字段”。因此,如果你是特定国家的OK,你应该看看localflavor包(类US .models. phonenumberfield为美国情况,等等)。

否则,你可以检查当地的口味,以获得所有国家的最大长度。Localflavor还有一些表单字段,可以与国家代码一起使用来验证电话号码。

其他回答

这个解决方案对我很有效:

首先安装django-phone-field。命令:

pip install django-phone-field

然后在models.py文件中:

from phone_field import PhoneField
...

class Client(models.Model):
    ...
    phone_number = PhoneField(blank=True, help_text='Contact phone number')

在文件settings.py中:

INSTALLED_APPS = [...,
                  'phone_field'
]

最后是这样的:

其他人提到了django-phonenumber-field。为了得到你想要的显示格式,你需要设置PHONENUMBER_DEFAULT_FORMAT设置为“E164”,“国际”,“国家”,或“RFC3966”,无论你想显示它。参见GitHub源代码。

在模型中的phone字段使用CharField,在localflavor应用程序中使用表单验证:

https://docs.djangoproject.com/en/1.7/topics/localflavor/

从2021-12-07开始,LocalFlavor似乎不再是Django的一部分了。

验证很容易。给他们发一段代码让他们输入。

CharField是存储它的好方法。我不会太担心把电话号码规范化。

首先,需要安装电话号码Django包。

pip install django-phonenumber-field[phonenumbers]

接下来是将其添加到已安装的应用程序中:

INSTALLED_APPS = [
    ...
    'phonenumber_field',
    ...
]

下面是如何在你的模型中使用它:

from phonenumber_field.modelfields import PhoneNumberField

class Artist(models.Model):

    phone_number = PhoneNumberField()