【发布时间】:2011-02-08 21:59:48
【问题描述】:
说我有:
class LogModel(models.Model):
message = models.CharField(max_length=512)
class Assignment(models.Model):
someperson = models.ForeignKey(SomeOtherModel)
def save(self, *args, **kwargs):
super(Assignment, self).save()
old_person = #?????
LogModel(message="%s is no longer assigned to %s"%(old_person, self).save()
LogModel(message="%s is now assigned to %s"%(self.someperson, self).save()
我的目标是向 LogModel 保存一些关于分配被分配给谁的消息。请注意,我需要知道该字段的旧值。
我看到代码建议,在 super().save() 之前,通过主键从数据库中检索实例并从那里获取旧值。这可以工作,但有点混乱。
此外,我计划最终通过信号将这段代码从 .save() 方法中分离出来——即 pre_save() 和 post_save()。尝试使用上述逻辑(从 pre_save 中的数据库检索,在 post_save 中创建日志条目)在这里似乎失败,因为 pre_save 和 post_save 是两个单独的方法。也许在 pre_save 中我可以检索旧值并将其作为属性粘贴到模型上?
我想知道这是否有一个常见的成语。谢谢。
【问题讨论】: