A Django app providing database and form fields for pytz timezone objects.
Project description
django-timezone-field
A Django app providing database, form and serializer 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
-
Install from
pypi
pip install django-timezone-field
-
Add
timezone_field
to your django project'ssettings.INSTALLED_APPS
INSTALLED_APPS = [..., 'timezone_field', ...]
Running the tests
From the repository root, with poetry
poetry install
poetry run pytest
Changelog
4.2 (2021-07-07)
- Officially support for django 3.2, python 3.9
- Fix bug with field deconstruction (#74)
- Housekeeping: use poetry, github actions, pytest
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 valuesWITH_GMT_OFFSET
andSTANDARD
- 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)
- Support django 1.11, 2.0, 2.1
- Add support for python 3.7
- Change default human-readable timezone names to exclude underscores (#32 & #37)
2.1 (2018-03-01)
- Add support for django 1.10, 1.11
- Add support for python 3.6
- Add wheel support
- Support bytes in DB fields (#38 & #39)
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
topytz.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
topytz.common_timezones
. If you have timezones in your DB that are inpytz.all_timezones
but not inpytz.common_timezones
, this is a backward-incompatible change. Old behavior can be restored by specifyingchoices=[(tz, tz) for tz in pytz.all_timezones]
in your model definition.
1.0 (2013-08-04)
- Initial release as
timezone_field
.
Credits
Originally adapted from Brian Rosner's django-timezones.
Made possible thanks to the work of the contributors.
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
Close
Hashes for django-timezone-field-4.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 73a43d235e6f0e57b6f988111ec8767fa601dfafaf7321255b8a869ae3ed3688 |
|
MD5 | 7132a37818ca77b059257a1a90b9aca6 |
|
BLAKE2b-256 | 7ed069918248f5b0f7defa8d04b0571b76bfe4d6f35a38da39b2d74ed04fd8bf |
Close
Hashes for django_timezone_field-4.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 142e430b1c78030c6d235507ca3c8f7771e24f91d23dfec43a5f085abdad8075 |
|
MD5 | 20281093214f1b536d61026f95e495ba |
|
BLAKE2b-256 | dac15433dfb76e5fb1963598a877658f11e5bc9b04b13523b5f068597c6660c4 |