有没有办法在Django中保存或更新对象之前对其进行操作?

时间:2011-08-12 21:30:11

标签: django datetime django-orm django-models

根据this最近的问题,我将需要以UTC格式存储所有datetime个对象,因此我需要使用自定义库在存储之前正确翻译它们。有没有办法可以对即将保存和/或更新的对象进行操作,以便将datetime对象转换为UTC?我希望这对我如何使用Django非常透明,所以如果它是这些类型的字段中的任何一个:

created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
event_time = models.DateTimeField()

......我想在幕后'翻译',以便不必手动执行以下操作:

new_instance.created = translate(now)
new_instance.modified = translate(now)
new_instance.event_time = translate(event_time)

在所有DateTimeField字段上手动执行此操作非常麻烦。 Django有办法做到这一点吗?在Hibernate中,我要么使用AOP,要么使用Interceptor来执行此操作。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

如何设置TIME_ZONE

要回答标题上的问题,您可以覆盖模型上的保存方法:

def save(self):
    # do stuff before save
    super(YourModel, self).save()
    # do stuff after save

如果您想通知其他人某些事件(例如预存和后保存),请使用django signals

答案 2 :(得分:0)

嗯,如果我理解正确的话,我认为一个好的方法就是创建一个自定义的DateTimeField。为此,你应该继承DateTimeField并覆盖一些方法(to_python,pre_save等,这取决于你的具体需求)。

查看documentation了解详情。