Saltar al contenido

¿Cuál es la mejor manera de almacenar el número de teléfono en los modelos de Django?

Solución:

En realidad, podría buscar el formato E.164 estandarizado internacionalmente, recomendado por Twilio, por ejemplo (que tiene un servicio y una API para enviar SMS o llamadas telefónicas a través de solicitudes REST).

Es probable que esta sea la forma más universal de almacenar números de teléfono, en particular si tiene números internacionales con los que trabaja.

1. Llame por PhoneNumberField

Puedes usar phonenumber_field Biblioteca. Es el puerto de la biblioteca libphonenumber de Google, que impulsa el manejo de números de teléfono de Android https://github.com/stefanfoulis/django-phonenumber-field

En modelo:

from phonenumber_field.modelfields import PhoneNumberField

class Client(models.Model, Importable):
    phone = PhoneNumberField(null=False, blank=False, unique=True)

En forma:

from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
    phone = PhoneNumberField()

Obtenga el teléfono como una cadena del campo del objeto:

    client.phone.as_e164 

Cadena de teléfono Normolize (para pruebas y otro personal):

    from phonenumber_field.phonenumber import PhoneNumber
    phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164

2. Llamar por regexp

Una nota para su modelo: los números E.164 tienen una longitud máxima de caracteres de 15.

Para validar, puede emplear alguna combinación de formato y luego intentar comunicarse con el número inmediatamente para verificar.

Creo que usé algo como lo siguiente en mi proyecto django:

class ReceiverForm(forms.ModelForm):
    phone_number = forms.RegexField(regex=r'^+?1?d{9,15}$', 
                                error_message = ("Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed."))

EDITAR

Parece que esta publicación ha sido útil para algunas personas, y parece que vale la pena integrar el comentario a continuación en una respuesta más completa. Según jpotter6, también puede hacer algo como lo siguiente en sus modelos:

modelos.py:

from django.core.validators import RegexValidator

class PhoneModel(models.Model):
    ...
    phone_regex = RegexValidator(regex=r'^+?1?d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
    phone_number = models.CharField(validators=[phone_regex], max_length=17, blank=True) # validators should be a list

Utilice django-phonenumber-field: https://github.com/stefanfoulis/django-phonenumber-field

pip install django-phonenumber-field

Usar CharField para el campo de teléfono en el modelo y el localflavor aplicación para la validación de formularios:

https://docs.djangoproject.com/en/1.7/topics/localflavor/

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *