eug*_*ene 6 python django django-models django-queryset
1. instance.save()
2. instance.foo = foo; instance.save(update_fields=['foo'])
3. InstanceClass.objects.filter(id=instance.id).update(foo=foo)
Run Code Online (Sandbox Code Playgroud)
我发现#3有时候不可靠.
在我运行#3之后,偶尔foo没有正确设置(没有提交?)
当我不想运行信号处理程序时,我常常使用#3.
什么时候使用以上3?
如果您只是更新记录并且不需要对模型对象执行任何操作,最有效的方法是调用update(),而不是将模型对象加载到内存中。例如,不要这样做:
instance = Entry.objects.get(id=10)
instance.comments_on = False
instance.save()
Run Code Online (Sandbox Code Playgroud)
做这个:
Entry.objects.filter(id=10).update(comments_on=False)
Run Code Online (Sandbox Code Playgroud)
注意:
update()还可以防止竞争条件,即在加载对象和调用save().*之间的短时间内,数据库中的某些内容可能会发生变化update()在 SQL 级别进行更新,因此不会调用 any save(),因此如果您有一个覆盖的save()方法,则必须使用第一种方式get()和save()。检查Queryset文档,这里都有解释。
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |