Skip to content

matix-io/django-fixed-timezone-field

Repository files navigation

django-fixed-timezone-field

What problem does this solve?

There's a detailed description here.

Installation

pip install django-fixed-timezone-field

Usage

Basic example:

from django import forms
from django.db import models
from fixed_timezone_field import FixedTimezoneDateTimeField
import pytz


class Event(models.Model):
	starts_at = models.DateTimeField()


class EventForm(forms.ModelForm):
	starts_at = FixedTimezoneDateTimeField()

	class Meta:
		model = Event
		fields = ['starts_at']

	def __init__(self, *args, **kwargs):
		super().__init__(*args, **kwargs)
		self.fields['starts_at'].timezone = pytz.UTC # or whatever timezone you want

If the model also contains the timezone, and the same form is used to submit both the timezone and the time, you need to use some other tricks.

from django import forms
from django.db import models
from fixed_timezone_field import FixedTimezoneDateTimeField
from timezone_field import TimeZoneField
import pytz


class Event(models.Model):
	starts_at = models.DateTimeField()
	timezone = TimeZoneField()


class EventForm(forms.ModelForm):
	starts_at = FixedTimezoneDateTimeField()

	class Meta:
		model = Event
		fields = ['starts_at']

	def __init__(self, *args, **kwargs):
		super().__init__(*args, **kwargs)
		self.fields['starts_at'].timezone = self.instance.timezone

	def clean(self, *args, **kwargs):
		cleaned_data = super().clean(*args, **kwargs)
		timezone = cleaned_data['timezone']
		cleaned_data['starts_at'] = tz.localize(cleaned_data['starts_at'].replace(tzinfo=None))
		self.instance.starts_at = cleaned_data['starts_at']
		return cleaned_data

About

Ignore the activated timezone for Django DateTimeField.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published