Phone number field for Django admin
Project description
Installation
run pip install django_phonenumbers
Configure settings.py
Add django_phonenumbers to INSTALLED_APPS
manage.py
run manage.py collectstatic
settings.py
PHONE_NUMBER_REGION = 'GE'
PHONE_NUMBERS_FORMATS_BY_REGION = {
'GE': {
'pattern': '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', 'format': '\\1 \\2-\\3-\\4', 'prefix_format': '+%s (%s)'
},
'US': {
'pattern': '(\\d{3})(\\d{3})(\\d{4})', 'format': '\\1 \\2-\\3', 'prefix_format': '+%s (%s)'
},
}
“PHONE_NUMBER_REGION” determines which country region will be selected in admin’s corresponding phone number field
“PHONE_NUMBERS_FORMATS_BY_REGION” is used in “phone_number_format” filter
Model
#models.py
class MyModel(models.Model):
...
phone_number = PhoneNumberField()
...
def __str__(self):
return str(self.phone_number)
“phone_number” field’s type will be “PhoneNumber”
class PhoneNumber:
def __init__(self, country_code=None, region_code=None, phone_number=None):
"""
:type country_code: str
:type region_code: str
:type phone_number: str
"""
self.country_code = country_code
self.google_phone_number = None
self.region_code = region_code
self.phone_number = phone_number
“__str__” and “__repr__” functions are overridden to return “country_code”+” “+”phone_number”
model.fields.PhoneNumberField is using form.fields.PhoneNumberField in admin by default
model.fields.PhoneNumberField and form.fields.PhoneNumberField is validating and formatting(in national format) entered number
Template example
<li>
{{ number.phone_number }}
// {{ number.phone_number.region_code }}
// {{ number.phone_number.country_code }}
// {{ number.phone_number.phone_number }}
<div>
{% load phone_numbers_extra %}
<h4>Filter
<small>{{ number.phone_number|phone_number_format }}</small>
</h4>
<h4>Simple tag
<small>
{% phone_number number.phone_number pattern='(\\d{3})(\\d{3})(\\d{3})' number_format='\\1 \\2-\\3' prefix_format='+%s (%s)' %}
</small>
</h4>
</div>
</li>
phone_number_format uses PHONE_NUMBERS_FORMATS_BY_REGION from settings.py to determine phone number format
Example
'GE': { 'pattern': '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', 'format': '\\1 \\2-\\3-\\4', 'prefix_format': '+%s (%s)'},
‘GE’ : region code
- ‘pattern’'(\\d{3})(\\d{2})(\\d{2})(\\d{2})' is regex. this regex will split phone number in 4 groups:
3 digits
2 digits
2 digits
2 digits
‘format’ : '\\1 \\2-\\3-\\4' numbers are groups mentioned above. for example if you want to put last 2 digits in scopes you should write ‘\1 \2-\3-(\4)’ and result will be xxx xx-xx-(xx)
‘prefix_format’ : ‘+%s (%s)’ first “%s” is country code second mobile operator or city code for example +995 (595) where 995 is my country code and 595 my mobile operator’s code you can change formatting fore example ‘[%s] [%s]’ will give [995] [595] this result
with this simple tag you can specify format inline
{% phone_number number.phone_number pattern='(\\d{3})(\\d{3})(\\d{3})' number_format='\\1 \\2-\\3' prefix_format='+%s (%s)' %}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file django_phonenumbers-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: django_phonenumbers-1.0.1-py3-none-any.whl
- Upload date:
- Size: 2.6 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cd617e4ee924f6492e0106d738fea619c95f3659e41dbeb97df83c1f3b51f453 |
|
MD5 | 1400f631d7c1392069a7da7626568afe |
|
BLAKE2b-256 | 3d8ead888a32f8ed14cf660ea1160f077a729735e93d493767691b0e4e8edb77 |