我有那些機型:Django和時區:如何渲染知道日期時間爲一個天真的一個模板(與pytz)
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)
我的用戶輸入的地方,並在形式的天真的日期時間。 我已經在DB的地方的時區,所以我不需要從我的用戶的時區。我將這個日期時間轉換並保存爲DB中的一個有意識的日期時間(我使用Postgres)。 數據以正確的偏移量正確保存。
當我想呈現數據(例如更新表單)時,Django會將其轉換回天真的日期時間,但使用settings.py的默認時區(TIME_ZONE ='UTC')。 我想知道使用正確的時區(Place對象之一)將已知日期時間轉換回天真時間的最佳方法。我寧願在模型級別而不是模板級別進行轉換(我使用JQueryUI進行日期時間選擇,並且由於第一次轉換完成了,我寧願在相同的位置進行反向轉換)。
我的一些想法: 在模型中PlaceAction init()? 使用自定義管理器?
我無法找到文檔中用於反向轉換爲與默認時區不同的時區的最佳做法。有一個嗎?
顯然,在開發中有一個queryset方法。 [這裏](https://docs.djangoproject.com/en/dev/ref/models/querysets/#datetimes) – 2013-04-26 12:47:27
爲了在原來的時區獲得正確的時間:'self.action_time.astimezone(place_tz).replace (tzinfo = None)' – 2013-04-26 12:58:06
啊,當然,'astimezone'應該覆蓋掉DLS。除此之外,你可能會對你的時區字段感興趣https://github.com/mfogel/django-timezone-field。它針對ptyz進行驗證,並返回一個ptyz.Timezone()對象。 – rockingskier 2013-04-26 14:11:39