如何正确配置我的应用程序以使用 Django 电话号码字段模块?

Dav*_*ave 2 python django validation phone-number python-3.x

我正在使用 Django 2.0、Python 3.7 和 Django PhoneNumber 字段——https: //github.com/stefanfoulis/django-phonenumber-field并因此设置了我的模型......

class Coop(models.Model):
    name = models.CharField(max_length=250, null=False)
    type = models.ForeignKey(CoopType, on_delete=None)
    address = AddressField(on_delete=models.CASCADE)
    enabled = models.BooleanField(default=True, null=False)
    phone = PhoneNumberField(null=True)
    email = models.EmailField(null=True)
    web_site = models.TextField()
Run Code Online (Sandbox Code Playgroud)

我已经在我的 settings.py 文件中添加了这个...

PHONENUMBER_DB_FORMAT="RFC3966"
Run Code Online (Sandbox Code Playgroud)

但是,当我使用以下 JSON 提交表单时...

{
        "name": "3999",
        "type": {
            "name": "Coworking Space"
        },
        "address": {
            "street_number": "222",
            "route": "1212",
            "raw": "222 W. Merchandise Mart Plaza, Suite 1212",
            "formatted": "222 W. Merchandise Mart Plaza, Suite 1212",
            "latitude": 41.88802611,
            "longitude": -87.63612199,
            "locality": {
                "name": "Chicago",
                "postal_code": "60654",
                "state": 1
            }
        },
        "enabled": true,
        "phone": "303-234-1234",
        "email": null,
        "web_site": "http://www.1871.com/"
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误(400 响应)...

{"phone":["The phone number entered is not valid."]}
Run Code Online (Sandbox Code Playgroud)

我还能如何配置我的服务器以识别我的电话号码格式(或者我是否需要更改格式)?

ove*_*ock 5

我看到了实现这一目标的三种方法:

选项1

在您的内部使用RegEx 验证器PhoneNumberField

from django.core.validators import RegexValidator
...
phone = PhoneNumberField(null=True, validators=[RegexValidator(r'^\d{3}-\d{3}-\d{4}$')])
Run Code Online (Sandbox Code Playgroud)

选项 2

根据文档,您可以设置格式为NATIONAL,然后设置区域。因此,您可以在设置中使用

PHONENUMBER_DB_FORMAT = 'NATIONAL'
PHONENUMBER_DEFAULT_REGION = 'US'
Run Code Online (Sandbox Code Playgroud)

选项 3

使用RegEx 验证器,但将您的字段更改为CharField.

from django.core.validators import RegexValidator
...
phone = models.CharField(null=True, validators=[RegexValidator(r'^\d{3}-\d{3}-\d{4}$')])
Run Code Online (Sandbox Code Playgroud)