Обновление Django DeserializedObject

У меня есть динамически загружаемый объект из json-файла.

Согласно документации, я могу сохранить объект таким образом:

for deserialized_object in serializers.deserialize("json", data):
    if object_should_be_saved(deserialized_object):
        deserialized_object.save()

Однако, если объект уже существует в базе данных, я вполне справедливо получаю django.db.utils.IntegrityError: duplicate key value violates unique constraint .

Я не вижу ничего в документации, что позволило бы сделать deserialized_object.update() вместо deserialized_object.save(). Возможно ли это?

Вы можете использовать update_or_create и model_to_dict:

from django.forms.models import model_to_dict

for deserialized_object in serializers.deserialize("json", data):
    if object_should_be_saved(deserialized_object):
        DeserializedObject.objects.update_or_create(
            id=deserialized_object.id,
            defaults={k: v for (k, v) in 
                      model_to_dict(deserialized_object).items() 
                      if k != 'id'}
        )
Вернуться на верх