#python #django
Вопрос:
Я новичок в среде django , и я хотел бы знать, как построить следующий запрос, в котором я могу выполнить операцию вставки, когда объект не существует, но обновить измененные поля, если есть объект со следующим идентификатором
from demo.models import Person
update_values = {"name": "Alice", "age": 12, "is_manager":False}
new_values = {"name": "Bob", "age": 25, "is_manager":True}
obj, created = Person.objects.update_or_create(identifier='id',
defaults=update_values)
if created:
print(f"created {obj}")
else:
print(f"updated {obj}")
записка:
Я хочу сделать это с помощью одного метода update_or_create, а не с помощью двух get_or_create update_or_create
Ответ №1:
Я в замешательстве. Похоже, вы делаете это правильно, исходя из предположения, что идентификатор=»идентификатор» — это то, на чем вы фильтруете. Ваш код переводится obj = Person.objects.get(identifier="id"); [setattr(obj, k, v) for k,v in defaults.items()]; obj.save()
так, а затем, если его не существует, он вставляет все эти параметры и значения по умолчанию. Другими словами, я думаю, что вы identifier="id"
можете ошибаться. Я думаю,вы имели id=a primary key value
в виду 1,2,3 и т. Д.
Подробное и действительно лучшее объяснение из документов Django: https://docs.djangoproject.com/en/dev/ref/models/querysets/#update-or-create
Просто обратите внимание, что независимо от того, что вы делаете, требуется два запроса.