Django:如何在.save()之后判断一个对象是否已更新

时间:2015-04-28 12:18:38

标签: python django django-models

在Django 1.5中,我使用以下代码将一些数据存储到我的模型中:

new_object, created = MyModel.objects.get_or_create(
    pk = object.id,
    default = object_dict
)

if created:
   # ... code that creates a log  ... 
else:
    newobject.save()
    # ... code that creates a log IF the record has been updated

当save()方法返回None时,有没有办法知道保存的实际更新是否没有比较对象的两种状态(保存前后)?

2 个答案:

答案 0 :(得分:0)

get_or_create不会更新,默认值用于初始获取查询中不需要的参数。

根据django docs:

defaults = kwargs.pop('defaults', {})
params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
params.update(defaults)
obj = self.model(**params)
obj.save()

答案 1 :(得分:0)

get_or_create方法不会对现有数据库条目进行更新,因此如果您没有手动设置/更改某些实例,则调用newobject.save()对已创建的实例没有影响属性。另外,您的get_or_create语法错误,请查看docs。注意,它应该是默认值而不是默认值。

new_object, created = MyModel.objects.get_or_create(
    pk=object.id,
    defaults=object_dict
)