Skip to main content

Lightweight model and form field for phone numbers in Django

Project description

django-phone-field

Lightweight model and form field for phone numbers in Django

  • View and edit phone numbers in forms and the Django admin in pretty format: (415) 123-4567
  • Store all phone numbers canonically in the database for easy searching & uniqueness: +14151234567
  • Built-in support for simple extensions: (415) 123-4567, press 88
  • Doesn't choke on international numbers (but doesn't format them, either)
  • Automatically format phone numbers in templates

This package is simple, lightweight, and without dependencies. However, it doesn't attempt to solve fancy problems or deal with international phone numbers. For a full-featured phone number package, take a look at django-phonenumber-field.

Installation

This package is designed for Python 3 and Django 1.10+. Install via:

pip install django-phone-field

Then add 'phone_field' to your INSTALLED_APPS setting.

Usage

In your models.py:

from django.db import models
from phone_field import PhoneField


class MyModel(models.Model):
    name = models.CharField(max_length=128)
    phone = PhoneField(blank=True, help_text='Contact phone number')

PhoneField accepts standard options for a Django CharField. By default it sets max_length=31. Feel free to override this, set blank=True, etc. as you would otherwise.

There is one special argument, E164_only=False, which adds a form validator to only accept numbers in the E164 format (currently, only supported for US phone numbers).

In your template:

User {{ obj.name }} has phone number {{ obj.phone }}

Result:

User Ted has phone number (415) 123-1233

Database representation

PhoneField attempts to coerce all phone numbers to the following format:

+[country code][number]x[extension]
+12223334444x55

where the extension part is optional. If the input phone number can't be coerced to this format, PhoneField gives up and simply stores it as-is.

Because all phone numbers are stored without formatting, you can set this field to be unique on a Django model and it will actually work.

Extras

Use the |phone template filter to attempt to display a formatted phone number from arbitrary text. Use the |raw_phone template filter to display the raw, un-formatted value.

Use property .is_E164 to check if a PhoneNumber object is in E164 format.

Also provided are .is_standard (E164 but with extensions allowed) and .is_usa.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-phone-field-1.8.1.tar.gz (19.7 kB view details)

Uploaded Source

Built Distribution

django_phone_field-1.8.1-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file django-phone-field-1.8.1.tar.gz.

File metadata

  • Download URL: django-phone-field-1.8.1.tar.gz
  • Upload date:
  • Size: 19.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.0.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.3

File hashes

Hashes for django-phone-field-1.8.1.tar.gz
Algorithm Hash digest
SHA256 db63af60fc3a3c66b9faa7e72bb7972cd1518299f2e93d68dd95d8df6214f7ed
MD5 f66b39841e6ebc654e29a86010714fa1
BLAKE2b-256 2cc93aba7b0a07d4a1a7e1ef17c713abb4d2571e42e18326e7247a78e4e040cf

See more details on using hashes here.

File details

Details for the file django_phone_field-1.8.1-py3-none-any.whl.

File metadata

  • Download URL: django_phone_field-1.8.1-py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.0.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.3

File hashes

Hashes for django_phone_field-1.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 407e74b65e8f7dd14d0a0aa89e277516d57ad6a09ce992cdd94e15b1624b9961
MD5 47e9d4c9cf354c477b571fdf2fb11699
BLAKE2b-256 81c4ff34caba83e8814bfdbde02d1f67a759723c65144b26443f430619baf34b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page