通过变量模型名称和pk获取模型实例

时间:2017-01-29 14:47:47

标签: django

我正在使用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来获取具有回滚字段值的实例?

1 个答案:

答案 0 :(得分:1)

您可以使用django-dirtyfieldspre_save信号:

@receiver(pre_save, sender=MyModel)
def pre_save_logic(sender, instance, **kwargs):
    if 'my_field' in instance.get_dirty_fields():
        do_some_logic()