我已经覆盖了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)
有人有想法吗?
答案 0 :(得分:1)
如果您正在使用ModelForm
作业,请覆盖save
方法并决定是否级联到模型的save
(使用{{1}调用super
})或不。
此时您可能掌握了所有信息。现在你需要一种方法来使用它。
django中的表单提供了所需的工具。查看表单的commit=True
属性和changed_data
方法。
has_changed()
答案 1 :(得分: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)
答案 2 :(得分:0)
因此您希望从数据库中获取数据,并且您不希望进行多次查询。如果您的数据不是太多,您可以只读取数据库中的所有数据到内存,然后将您的即将保存的值与内存中的数据进行比较,如果它们不相同,只需将该值分配给内存数据以及数据库中的更新。