有时您需要收集用户的时间而不收集关联的日期。例如,如果用户正在配置每天同一时间运行的重复事件。姜戈的TimeField
但不玩时区。但是,在这种特殊情况下(并且可能在您单独记录时间的任何时候),时区是一个重要因素。那么,如何存储时区感知时间?
答案是你不知道。为了使时间能够感知时区,它必须有一个与之关联的日期。想想夏令时......我的解决方案是使用DateTimeField
在模型上并覆盖表单,如下所示:
# models.py
class MyModel(models.Model):
time_of_day = models.DateTimeField()
# form_fields.py
from django.forms.util import from_current_timezone, to_current_timezone
from django.utils import timezone
class TzAwareTimeField(forms.fields.TimeField):
def prepare_value(self, value):
if isinstance(value, datetime.datetime):
value = to_current_timezone(value).time()
return super(TzAwareTimeField, self).prepare_value(value)
def clean(self, value):
value = super(TzAwareTimeField, self).to_python(value)
dt = to_current_timezone(timezone.now())
return dt.replace(
hour=value.hour, minute=value.minute,
second=value.second, microsecond=value.microsecond)
# forms.py
class MyForm(forms.ModelForm):
time_of_day = TzAwareTimeField()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)