0

我已经覆盖了 Django 的 Model.save() 方法,以便在添加或更新对象时对外部数据库执行操作。

基本上,这是我的方法:

def save(self, *args, **kwargs):    
    if self.pk is None:
        # Insert query on the external database.
    else:
        # Update query on the external database.

    super(MyModel, self).save(*args, **kwargs)

我现在的问题是,我知道我可以通过 self.name 访问提交的数据,但是我怎样才能访问旧数据呢?我的意思是,现有数据,当然是在更新的情况下。

因为这是我的问题,外部数据库不支持大量查询,我只想在相关字段已更新时才进行查询。

这是我想做的事情:

def save(self, *args, **kwargs):    
    if self.pk is None:
        # Insert query on the external database.
    else:
        if self.name is not self.THE_CURRENT_NAME
            # Update query on the external database.

    super(MyModel, self).save(*args, **kwargs)

有人有想法吗?

4

3 回答 3

1

如果您正在使用ModelForm该工作,请覆盖save其上的方法并决定是否级联到模型(使用save调用)。supercommit=True

此时您可能已经掌握了所有信息。现在你需要一种使用它的方法。

django 中的表单有你需要的工具。查看表单的changed_data属性和has_changed()方法。

class MyModelForm(forms.ModelForm):

    class Meta:
        model = MyModel

    def save(commit=True):
        if self.has_changed():
            super(MyModelForm, self).save(commit=commit)
于 2013-04-03T07:28:15.253 回答
0

您必须在保存之前从数据库中获取它:

def save(self, *args, **kwargs):    
    if self.pk is None:
        # Insert query on the external database.
    else:
        old = Lab.objects.get(pk=self.pk)
        if self.name is not old.name:
            ...             

    super(Lab, self).save(*args, **kwargs)
于 2013-04-03T07:15:34.790 回答
0

所以你想从数据库中获取你的数据,你不想做很多查询。如果您的数据不是太多,您可以将数据库中的所有数据读取到内存中,然后将您的即将保存的值与内存中的数据进行比较,如果它们不一样,只需将该值分配给内存数据以及数据库中的更新。

于 2013-04-03T07:29:53.403 回答