我正在使用Django 1.9,现在尝试覆盖save
方法行为。问题是,当我执行instance.some_field = some_value
时,self
对象已经被修改,而我需要知道这是some_field
的原始值。要做到这一点,唯一的出路似乎是通过self
的pk从数据库中获取对象。
所以我想知道什么是GENERIC语法 - 如果还有 - 从数据库中获取实例?通过说GENERIC,我暗示我不想明确键入模型名称(如MYMODEL.objects.get(...)
),而是让Django根据目标实例的模型找出正确的模型。
为了使问题更清楚,让我用伪代码说明我的目标:
def save_extented(self, *args, **kwargs):
original_object = (self model).objects.get(pk = self.pk)
有可能吗?或者也许我不需要这个,并且有一些聪明的Django hack来获取具有回滚字段值的实例?
答案 0 :(得分:1)
您可以使用django-dirtyfields和pre_save
信号:
@receiver(pre_save, sender=MyModel)
def pre_save_logic(sender, instance, **kwargs):
if 'my_field' in instance.get_dirty_fields():
do_some_logic()