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 >
3 Réponses :
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}$
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)
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 .
J'ai essayé d'ajouter "PHONENUMBER_DEFAULT_REGION = 'US'" à mon fichier settings.py mais j'obtiens toujours l'erreur.
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}$')])
Je suis allé avec l'option n ° 2 et c'est un gagnant.
@kyore, a essayé mais n'a pas fonctionné.