首页 文章

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

提问于
浏览
0

我正在使用Django 1.9,现在尝试覆盖 save 方法行为 . 问题是,当我执行 instance.some_field = some_value 时, self 对象已经被修改,而我需要知道这是 some_field 的原始值 . 要做到这一点,唯一的出路似乎是通过 self 的pk从数据库中获取对象 .

所以我想知道什么是GENERIC语法 - 如果有's any - to fetch instance from the database? By saying GENERIC, I imply that I don' t想要显式键入模型名称(如 MYMODEL.objects.get(...) ),而是让Django根据目标实例的模型找出正确的模型 .

为了使问题更清楚,让我用伪代码说明我的目标:

def save_extented(self, *args, **kwargs):
   original_object = (self model).objects.get(pk = self.pk)

可能吗 ?或者也许我不需要这个,并且有一些聪明的Django hack来获取具有回滚字段值的实例?

1 回答

  • 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()
    

相关问题