-
update_or_create
( 默認值=無 , ** kwargs ) ¶
使用給定更新對象的便捷方法,kwargs
必要時創建新對象。這defaults
是用於更新對象的(字段,值)對的字典。值中的值defaults
可以是callables。
返回一個元組,其中是創建或更新的對象,是一個布爾值,指定是否創建了新對象。(object, created)
object
created
該update_or_create
方法嘗試根據給定的數據從數據庫中獲取對象kwargs
。如果找到匹配項,則會更新defaults
字典中傳遞的字段 。
這意味着作為boilerplatish代碼的快捷方式。例如:
1 defaults = {'first_name': 'Bob'} 2 try: 3 obj = Person.objects.get(first_name='John', last_name='Lennon') 4 for key, value in defaults.items(): 5 setattr(obj, key, value) 6 obj.save() 7 except Person.DoesNotExist: 8 new_values = {'first_name': 'John', 'last_name': 'Lennon'} 9 new_values.update(defaults) 10 obj = Person(**new_values) 11 obj.save()
隨着模型中字段數量的增加,這種模式變得非常笨拙。上面的例子可以update_or_create()
像這樣重寫:
1 obj, created = Person.objects.update_or_create( 2 first_name='John', last_name='Lennon', 3 defaults={'first_name': 'Bob'}, 4 )