我有这些模型:
class TimeZone(models.Model):
name = models.CharField(max_length = 40, unique = True, editable = False)
def tz(self):
return pytz.timezone(str(self.name))
class Place(models.Model):
name = models.CharField(max_length=200)
timezone = models.ForeignKey(TimeZone)
class PlaceAction(models.Model):
action_time = models.DateTimeField(blank=True, null=True)
place = models.ForeignKey(Place, related_name='Stop place')
def save(self, *args, **kwargs):
place_tz = self.place.timezone.tz()
if self.action_time:
self.action_time = place_tz.localize(self.action_time)
return super(PlaceAction, self).save(*args, **kwargs)
我的用户在表单中输入了一个地点和一个简单的日期时间。我已经在数据库中拥有该地点的时区,因此我不需要用户提供时区。我将此日期时间转换并保存为数据库中的可识别日期时间(我使用 Postgres)。数据以正确的偏移量正确保存。
当我想渲染数据时(例如以更新形式),Django 将其转换回一个简单的日期时间,但使用 settings.py 的默认时区(TIME_ZONE = 'UTC')。我想知道使用正确的时区(Place 对象之一)将感知日期时间转换回幼稚日期时间的最佳方法。我宁愿在模型级别而不是模板级别进行转换(我使用 JQueryUI 进行日期时间选择,由于第一次转换是在那里完成的,我宁愿在同一个地方进行反向转换)。
我的一些想法: 在模型中 PlaceAction init ()? 使用自定义管理器?
我在文档中找不到将反向转换为与默认时区不同的最佳实践。有吗?