1Metadata-Version: 2.1
2Name: django-timezone-field
3Version: 4.2.3
4Summary: A Django app providing database and form fields for pytz timezone objects.
5Home-page: http://github.com/mfogel/django-timezone-field/
6Author: Mike Fogel
7Author-email: mike@fogel.ca
8License: BSD
9Platform: UNKNOWN
10Classifier: Development Status :: 4 - Beta
11Classifier: Environment :: Web Environment
12Classifier: Framework :: Django
13Classifier: Framework :: Django :: 2.2
14Classifier: Framework :: Django :: 3.0
15Classifier: Framework :: Django :: 3.1
16Classifier: Framework :: Django :: 3.2
17Classifier: Intended Audience :: Developers
18Classifier: License :: OSI Approved :: BSD License
19Classifier: Operating System :: OS Independent
20Classifier: Programming Language :: Python
21Classifier: Programming Language :: Python :: 3
22Classifier: Programming Language :: Python :: 3.5
23Classifier: Programming Language :: Python :: 3.6
24Classifier: Programming Language :: Python :: 3.7
25Classifier: Programming Language :: Python :: 3.8
26Classifier: Programming Language :: Python :: 3.9
27Classifier: Programming Language :: Python :: 3.10
28Classifier: Topic :: Utilities
29Classifier: Framework :: Django
30Requires-Python: >=3.5
31Description-Content-Type: text/markdown
32Provides-Extra: rest_framework
33License-File: LICENSE.txt
34
35# django-timezone-field
36
37[![CI](https://github.com/mfogel/django-timezone-field/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/mfogel/django-timezone-field/actions)
38[![codecov](https://codecov.io/gh/mfogel/django-timezone-field/branch/main/graph/badge.svg?token=Rwekzmim3l)](https://codecov.io/gh/mfogel/django-timezone-field)
39[![pypi downloads](https://img.shields.io/pypi/dm/django-timezone-field.svg)](https://pypi.python.org/pypi/django-timezone-field/)
40[![pypi python support](https://img.shields.io/pypi/pyversions/django-timezone-field.svg)](https://pypi.python.org/pypi/django-timezone-field/)
41[![pypi django support](https://img.shields.io/pypi/djversions/django-timezone-field.svg)](https://pypi.python.org/pypi/django-timezone-field/)
42
43A Django app providing database, form and serializer fields for [pytz](http://pypi.python.org/pypi/pytz/) timezone objects.
44
45## Examples
46
47### Database Field
48
49```py
50import pytz
51from django.db import models
52from timezone_field import TimeZoneField
53
54class MyModel(models.Model):
55    tz1 = TimeZoneField(default='Europe/London')            # defaults supported
56    tz2 = TimeZoneField()                                   # in ModelForm displays like "America/Los Angeles"
57    tz3 = TimeZoneField(choices_display='WITH_GMT_OFFSET')  # in ModelForm displays like "GMT-08:00 America/Los Angeles"
58
59my_model = MyModel(
60    tz1='America/Los_Angeles',    # assignment of a string
61    tz2=pytz.timezone('Turkey'),  # assignment of a pytz.DstTzInfo
62    tz3=pytz.UTC,                 # assignment of pytz.UTC singleton
63)
64my_model.full_clean() # validates against pytz.common_timezones by default
65my_model.save()       # values stored in DB as strings
66my_model.tz1          # values retrieved as pytz objects: <DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>
67```
68
69### Form Field
70
71```py
72from django import forms
73from timezone_field import TimeZoneFormField
74
75class MyForm(forms.Form):
76    tz = TimeZoneFormField()                                    # displays like "America/Los Angeles"
77    tz2 = TimeZoneFormField(choices_display='WITH_GMT_OFFSET')  # displays like "GMT-08:00 America/Los Angeles"
78
79my_form = MyForm({'tz': 'America/Los_Angeles'})
80my_form.full_clean()        # validates against pytz.common_timezones by default
81my_form.cleaned_data['tz']  # values retrieved as pytz objects: <DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>
82```
83
84### REST Framework Serializer Field
85
86```py
87import pytz
88from rest_framework import serializers
89from timezone_field.rest_framework import TimeZoneSerializerField
90
91class MySerializer(serializers.Serializer):
92    tz1 = TimeZoneSerializerField()
93    tz2 = TimeZoneSerializerField()
94
95my_serializer = MySerializer(data={
96    'tz1': 'America/Argentina/Buenos_Aires',
97    'tz2': pytz.timezone('America/Argentina/Buenos_Aires'),
98})
99my_serializer.is_valid()            # true
100my_serializer.validated_data['tz1'] # <DstTzInfo 'America/Argentina/Buenos_Aires' LMT-1 day, 20:06:00 STD>
101my_serializer.validated_data['tz2'] # <DstTzInfo 'America/Argentina/Buenos_Aires' LMT-1 day, 20:06:00 STD>
102```
103
104## Installation
105
106Install from [`pypi`](https://pypi.org/project/django-timezone-field/)
107
108```sh
109pip install django-timezone-field
110```
111
112## Running the tests
113
114From the repository root, with [`poetry`](https://python-poetry.org/)
115
116```sh
117poetry install
118poetry run pytest
119```
120
121## Changelog
122
123#### 4.2.3 (2022-01-13)
124
125* Fix sdist installs ([#78](https://github.com/mfogel/django-timezone-field/issues/78))
126* Officially support python 3.10
127
128#### 4.2.1 (2021-07-07)
129
130* Reinstate `TimeZoneField.default_choices` ([#76](https://github.com/mfogel/django-timezone-field/issues/76))
131
132#### 4.2 (2021-07-07)
133
134* Officially support django 3.2, python 3.9
135* Fix bug with field deconstruction ([#74](https://github.com/mfogel/django-timezone-field/issues/74))
136* Housekeeping: use poetry, github actions, pytest
137
138#### 4.1.2 (2021-03-17)
139
140* Avoid `NonExistentTimeError` during DST transition ([#70](https://github.com/mfogel/django-timezone-field/issues/70))
141
142#### 4.1.1 (2020-11-28)
143
144* Don't import `rest_framework` from package root ([#67](https://github.com/mfogel/django-timezone-field/issues/67))
145
146#### 4.1 (2020-11-28)
147
148* Add Django REST Framework serializer field
149* Add new `choices_display` kwarg with supported values `WITH_GMT_OFFSET` and `STANDARD`
150* Deprecate `display_GMT_offset` kwarg
151
152#### 4.0 (2019-12-03)
153
154* Add support for django 3.0, python 3.8
155* Drop support for django 1.11, 2.0, 2.1, python 2.7, 3.4
156
157#### 3.1 (2019-10-02)
158
159* Officially support django 2.2 (already worked)
160* Add option to display TZ offsets in form field ([#46](https://github.com/mfogel/django-timezone-field/issues/46))
161
162#### 3.0 (2018-09-15)
163
164* Support django 1.11, 2.0, 2.1
165* Add support for python 3.7
166* Change default human-readable timezone names to exclude underscores ([#32](https://github.com/mfogel/django-timezone-field/issues/32) & [#37](https://github.com/mfogel/django-timezone-field/issues/37))
167
168#### 2.1 (2018-03-01)
169
170* Add support for django 1.10, 1.11
171* Add support for python 3.6
172* Add wheel support
173* Support bytes in DB fields ([#38](https://github.com/mfogel/django-timezone-field/issues/38) & [#39](https://github.com/mfogel/django-timezone-field/issues/39))
174
175#### 2.0 (2016-01-31)
176
177* Drop support for django 1.7, add support for django 1.9
178* Drop support for python 3.2, 3.3, add support for python 3.5
179* Remove tests from source distribution
180
181#### 1.3 (2015-10-12)
182
183* Drop support for django 1.6, add support for django 1.8
184* Various [bug fixes](https://github.com/mfogel/django-timezone-field/issues?q=milestone%3A1.3)
185
186#### 1.2 (2015-02-05)
187
188* For form field, changed default list of accepted timezones from `pytz.all_timezones` to `pytz.common_timezones`, to match DB field behavior.
189
190#### 1.1 (2014-10-05)
191
192* Django 1.7 compatibility
193* Added support for formatting `choices` kwarg as `[[<str>, <str>], ...]`, in addition to previous format of `[[<pytz.timezone>, <str>], ...]`.
194* 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.
195
196#### 1.0 (2013-08-04)
197
198* Initial release as `timezone_field`.
199
200## Credits
201
202Originally adapted from [Brian Rosner's django-timezones](https://github.com/brosner/django-timezones).
203
204Made possible thanks to the work of the [contributors](https://github.com/mfogel/django-timezone-field/graphs/contributors).
205
206
207