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é.