如何正确配置我的应用程序以使用 Django 电话号码字段模块?
How do I properly configure my app to use the Django phonenumber field module?
我正在使用 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()
我已将其添加到我的 settings.py 文件中...
PHONENUMBER_DB_FORMAT="RFC3966"
但是,当我使用以下 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/"
}
我收到此错误(400 响应)...
{"phone":["The phone number entered is not valid."]}
我还可以如何配置我的服务器来识别我的 phone 数字格式(或者我需要更改格式)?
使用正则表达式允许中间使用连字符。它将允许这些格式
* 123-456-7890
* 333-333-4444
* 1234567890
* 123456789
* 123-4567-890
* 14157059247
正则表达式^\d{3}-\d{3}-\d{4}$
如文档所述:
Recommended is one of the globally meaningful formats 'E164', 'INTERNATIONAL' or 'RFC3966'. 'NATIONAL' format require to set up PHONENUMBER_DEFAULT_REGION variabl
因此您需要设置默认区域。例如:PHONENUMBER_DEFAULT_REGION='US'
在您的 settings.py
.
我看到实现此目的的三种方法:
选项 1
在你的 PhoneNumberField
中使用 RegEx validator:
from django.core.validators import RegexValidator
...
phone = PhoneNumberField(null=True, validators=[RegexValidator(r'^\d{3}-\d{3}-\d{4}$')])
选项 2
根据文档,您可以将格式设置为NATIONAL
,然后设置区域。因此,you can use 在您的设置中:
PHONENUMBER_DB_FORMAT = 'NATIONAL'
PHONENUMBER_DEFAULT_REGION = 'US'
选项 3
使用 RegEx validator,但将字段更改为 CharField
。
from django.core.validators import RegexValidator
...
phone = models.CharField(null=True, validators=[RegexValidator(r'^\d{3}-\d{3}-\d{4}$')])
我正在使用 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()
我已将其添加到我的 settings.py 文件中...
PHONENUMBER_DB_FORMAT="RFC3966"
但是,当我使用以下 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/"
}
我收到此错误(400 响应)...
{"phone":["The phone number entered is not valid."]}
我还可以如何配置我的服务器来识别我的 phone 数字格式(或者我需要更改格式)?
使用正则表达式允许中间使用连字符。它将允许这些格式 * 123-456-7890 * 333-333-4444 * 1234567890 * 123456789 * 123-4567-890 * 14157059247
正则表达式^\d{3}-\d{3}-\d{4}$
如文档所述:
Recommended is one of the globally meaningful formats 'E164', 'INTERNATIONAL' or 'RFC3966'. 'NATIONAL' format require to set up PHONENUMBER_DEFAULT_REGION variabl
因此您需要设置默认区域。例如:PHONENUMBER_DEFAULT_REGION='US'
在您的 settings.py
.
我看到实现此目的的三种方法:
选项 1
在你的 PhoneNumberField
中使用 RegEx validator:
from django.core.validators import RegexValidator
...
phone = PhoneNumberField(null=True, validators=[RegexValidator(r'^\d{3}-\d{3}-\d{4}$')])
选项 2
根据文档,您可以将格式设置为NATIONAL
,然后设置区域。因此,you can use 在您的设置中:
PHONENUMBER_DB_FORMAT = 'NATIONAL'
PHONENUMBER_DEFAULT_REGION = 'US'
选项 3
使用 RegEx validator,但将字段更改为 CharField
。
from django.core.validators import RegexValidator
...
phone = models.CharField(null=True, validators=[RegexValidator(r'^\d{3}-\d{3}-\d{4}$')])