簡體   English   中英

如何正確配置我的應用程序以使用 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."]}

我還能如何配置我的服務器以識別我的電話號碼格式(或者我是否需要更改格式)?

我看到了實現這一目標的三種方法:

選項1

PhoneNumberField使用RegEx 驗證器

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

選項 2

根據文檔,您可以將格式設置為NATIONAL ,然后設置區域。 因此, 您可以在設置中使用

PHONENUMBER_DB_FORMAT = 'NATIONAL'
PHONENUMBER_DEFAULT_REGION = 'US'

選項 3

使用RegEx 驗證器,但將您的字段更改為CharField

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

正如文檔所說:

推薦是具有全球意義的格式“E164”、“INTERNATIONAL”或“RFC3966”之一。 'NATIONAL' 格式需要設置 PHONENUMBER_DEFAULT_REGION 變量

所以你需要設置你的默認區域。 例如:您的settings.py PHONENUMBER_DEFAULT_REGION='US'

使用正則表達式允許在它們之間使用連字符。 它將允許這些格式 * 123-456-7890 * 333-333-4444 * 1234567890 * 123456789 * 123-4567-890 * 14157059247

正則表達式^\\d{3}-\\d{3}-\\d{4}$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM