A Django app providing database and form fields for pytz timezone objects.
Project description
A Django app providing database and form fields for pytz timezone objects.
Examples
Database Field
import pytz
from django.db import models
from timezone_field import TimeZoneField
class MyModel(models.Model):
tz1 = TimeZoneField(default='Europe/London') # defaults supported
tz2 = TimeZoneField() # in ModelForm displays like "America/Los Angeles"
tz3 = TimeZoneField(choices_display='WITH_GMT_OFFSET') # in ModelForm displays like "GMT-08:00 America/Los Angeles"
my_model = MyModel(
tz1='America/Los_Angeles', # assignment of a string
tz2=pytz.timezone('Turkey'), # assignment of a pytz.DstTzInfo
tz3=pytz.UTC, # assignment of pytz.UTC singleton
)
my_model.full_clean() # validates against pytz.common_timezones by default
my_model.save() # values stored in DB as strings
my_model.tz1 # values retrieved as pytz objects: <DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>
Form Field
from django import forms
from timezone_field import TimeZoneFormField
class MyForm(forms.Form):
tz = TimeZoneFormField() # displays like "America/Los Angeles"
tz2 = TimeZoneFormField(choices_display='WITH_GMT_OFFSET') # displays like "GMT-08:00 America/Los Angeles"
my_form = MyForm({'tz': 'America/Los_Angeles'})
my_form.full_clean() # validates against pytz.common_timezones by default
my_form.cleaned_data['tz'] # values retrieved as pytz objects: <DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>
REST Framework Serializer Field
import pytz
from rest_framework import serializers
from timezone_field.rest_framework import TimeZoneSerializerField
class MySerializer(serializers.Serializer):
tz1 = TimeZoneSerializerField()
tz2 = TimeZoneSerializerField()
my_serializer = MySerializer(data={
'tz1': 'America/Argentina/Buenos_Aires',
'tz2': pytz.timezone('America/Argentina/Buenos_Aires'),
})
my_serializer.is_valid() # true
my_serializer.validated_data['tz1'] # <DstTzInfo 'America/Argentina/Buenos_Aires' LMT-1 day, 20:06:00 STD>
my_serializer.validated_data['tz2'] # <DstTzInfo 'America/Argentina/Buenos_Aires' LMT-1 day, 20:06:00 STD>
Installation
-
pip install django-timezone-field
Add timezone_field to your settings.INSTALLED_APPS:
INSTALLED_APPS = ( ... 'timezone_field', ... )
Changelog
4.1.2 (2021-03-17)
Avoid NonExistentTimeError during DST transition (#70)
4.1.1 (2020-11-28)
Don’t import rest_framework from package root (#67)
4.1 (2020-11-28)
Add Django REST Framework serializer field
Add new choices_display kwarg with supported values WITH_GMT_OFFSET and STANDARD
Deprecate display_GMT_offset kwarg
4.0 (2019-12-03)
Add support for django 3.0, python 3.8
Drop support for django 1.11, 2.0, 2.1, python 2.7, 3.4
3.1 (2019-10-02)
Officially support django 2.2 (already worked)
Add option to display TZ offsets in form field #46
3.0 (2018-09-15)
2.1 (2018-03-01)
2.0 (2016-01-31)
Drop support for django 1.7, add support for django 1.9
Drop support for python 3.2, 3.3, add support for python 3.5
Remove tests from source distribution
1.3 (2015-10-12)
Drop support for django 1.6, add support for django 1.8
Various bug fixes
1.2 (2015-02-05)
For form field, changed default list of accepted timezones from pytz.all_timezones to pytz.common_timezones, to match DB field behavior.
1.1 (2014-10-05)
Django 1.7 compatibility
Added support for formatting choices kwarg as [[<str>, <str>], …], in addition to previous format of [[<pytz.timezone>, <str>], …].
Changed default list of accepted timezones from pytz.all_timezones to pytz.common_timezones. If you have timezones in your DB that are in pytz.all_timezones but not in pytz.common_timezones, this is a backward-incompatible change. Old behavior can be restored by specifying choices=[(tz, tz) for tz in pytz.all_timezones] in your model definition.
1.0 (2013-08-04)
Initial release as timezone_field.
Running the Tests
Install tox.
From the repository root, run
tox
Postgres will need to be running locally, and sqlite will need to be installed in order for tox to do its job.
Found a Bug?
To file a bug or submit a patch, please head over to django-timezone-field on github.
Credits
Originally adapted from Brian Rosner’s django-timezones. The full list of contributors is available on github.
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 Distribution
Built Distribution
File details
Details for the file django-timezone-field-4.1.2.tar.gz
.
File metadata
- Download URL: django-timezone-field-4.1.2.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cffac62452d060e365938aa9c9f7b72d70d8b26b9c60243bce227b35abd1b9df |
|
MD5 | ba038235861b50e7533c66b52e84b26a |
|
BLAKE2b-256 | 3dceba24bb9b0b33243a829836a3f18ce030e5d0738965faf01fb84942688c80 |
Provenance
File details
Details for the file django_timezone_field-4.1.2-py3-none-any.whl
.
File metadata
- Download URL: django_timezone_field-4.1.2-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 897c06e40b619cf5731a30d6c156886a7c64cba3a90364832148da7ef32ccf36 |
|
MD5 | 3b8883032adeace7576a1397fa77e9c7 |
|
BLAKE2b-256 | fcbb6a90733e590dd908312427e9502c9ef7c5baeb55df2e7336992dea9de591 |