即使没有变化,Django update_or_create 也在更新?

Val*_*eau 3 django

我有一个名称字段为“jule”的用户。如果我尝试使用完全相同的名称更新它,如下所示:

obj, created = Person.objects.update_or_create(first_name='jule', defaults={'first_name': 'jule'})
Run Code Online (Sandbox Code Playgroud)

这会在我的数据库中执行操作吗?或者 django ORM 是否检测到没有需要进行的更改(然后不在我的数据库中执行任何操作)?

我需要这个来优化循环中的代码:)

感谢您的帮助 !

Ped*_*ian 6

来自文档

update_or_create 方法尝试根据给定的 kwargs 从数据库中获取对象。如果找到匹配项,它将更新默认字典中传递的字段。

这是样板代码的快捷方式。例如:

defaults = {'first_name': 'Bob'}
try:
    obj = Person.objects.get(first_name='John', last_name='Lennon')
    for key, value in defaults.items():
        setattr(obj, key, value)
    obj.save()
except Person.DoesNotExist:
    new_values = {'first_name': 'John', 'last_name': 'Lennon'}
    new_values.update(defaults)
    obj = Person(**new_values)
    obj.save()
Run Code Online (Sandbox Code Playgroud)

示例代码描述了它的具体用途update_or_create

  • @ValentinGarreau它将更新该字段(命中数据库),无论它是否更改。 (3认同)