【发布时间】:2014-05-08 07:37:03
【问题描述】:
我有 Event 类和 Participant 类,它们具有 Event 的外键。 在事件中我有:
model_changed_stamp = models.DateTimeField()
许多参与者正在参加一个甚至。
当 Event 类的任何实例发生更改或创建新实例时,我希望 model_changed_stamp 中的值将被更新。事实上,我还有很多其他类,比如 Building,它们也有 Event 的外键,我也想跟踪变化。
我想出了在Event 中使用实例类方法的想法。我试过了:
def model_changed(self):
value = getattr(self, 'model_changed_stamp')
value = datetime.now()
setattr(self, 'model_changed_stamp', value)
然后在 Participant 的 save() 或 Building 我想开火 self.event.model_changed()
我想知道如何正确操作。我应该使用信号吗?
更新 0: 根据一些阅读资料(例如 Django 的两勺),在这种情况下使用信号是一种过度杀伤。
更新1:在save(self)方法的参与者类中遵循Daniel Roseman的建议我尝试:
def save(self):
if self.id is None:
self.event.model_changed()
在Event我定义model_changed如下:
def model_changed(self):
self.model_changed_stamp = datetime.now()
self.save()
而且它不起作用 - 没有更新日期,应该是什么时候,即创建新参与者的时间。
更新 2:工作!!! ;-)
添加后:self.save() 作为model_changed 方法的最后一行。
【问题讨论】:
-
model_changed的实现中的三行可以简单地写成self.model_changed_stamp = datetime.now() -
您是否考虑过只在 Event 上保留
changed_stamp字段,而不需要所有这些相关模型也保持更新? -
@SohanJain 会有许多其他类将 Event 作为 FK,并通知它有关更改。
标签: python django datetime python-datetime