1
votes

Comment configurer correctement mon application pour utiliser le module de champ de numéro de téléphone Django?

J'utilise Django 2.0, Python 3.7 et le champ Django PhoneNumber - https : //github.com/stefanfoulis/django-phonenumber-field et j'ai configuré mon modèle ainsi ...

{"phone":["The phone number entered is not valid."]}

J'ai ajouté ceci dans mon fichier settings.py. ..

{
        "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/"
}

Cependant, lorsque j'envoie mon formulaire en utilisant le JSON suivant ...

PHONENUMBER_DB_FORMAT="RFC3966"

j'obtiens cette erreur (une réponse 400) ...

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()

Sinon, comment puis-je configurer mon serveur pour qu'il reconnaisse le format de mon numéro de téléphone (ou dois-je changer le format)? p >


1 commentaires

@kyore, a essayé mais n'a pas fonctionné.


3 Réponses :


0
votes

Utilisez l'expression régulière pour autoriser le trait d'union entre les deux. Cela permettra à ces formats * 123-456-7890 * 333-333-4444 * 1234567890 * 123456789 * 123-4567-890 * 14157059247

Expression régulière ^\d{3}-\d{3}-\d{4}$


4 commentaires

Utilisez l'expression régulière où?


@Dave, Près du modal et appelez-le dans le champ


Sry, je ne comprends pas ce que vous décrivez.


@Dave phone_regex = RegexValidator (regex = r '^ \ +? 1? \ D {9,15} $', message = "Le numéro de téléphone doit être saisi au format: '+999999999'. Jusqu'à 15 chiffres autorisé. ") à l'intérieur du modèle phone_number = models.CharField (validators = [phone_regex], max_length = 17, unique = True)



2
votes

Comme le dit la documentation:

Recommandé est l'un des formats globaux significatifs 'E164', 'INTERNATIONAL' ou 'RFC3966'. Le format 'NATIONAL' nécessite la configuration de la variable PHONENUMBER_DEFAULT_REGION

Vous devez donc configurer votre région par défaut. par exemple: PHONENUMBER_DEFAULT_REGION = 'US' dans votre settings.py .


1 commentaires

J'ai essayé d'ajouter "PHONENUMBER_DEFAULT_REGION = 'US'" à mon fichier settings.py mais j'obtiens toujours l'erreur.



1
votes

Je vois trois façons d'y parvenir:

Option 1

Utilisez un validateur RegEx dans votre PhoneNumberField:

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

Option 2

Selon la documentation, vous pouvez définir le format sur NATIONAL , puis définir la région. En tant que tel, vous pouvez utiliser dans vos paramètres:

PHONENUMBER_DB_FORMAT = 'NATIONAL'
PHONENUMBER_DEFAULT_REGION = 'US'

Option 3

Utilisez un validateur RegEx , mais changez votre champ en CharField .

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


1 commentaires

Je suis allé avec l'option n ° 2 et c'est un gagnant.