Обновление элемента с помощью экземпляра модели django

Хорошо ли обновлять элемент, сохраняя экземпляр модели с тем же id?

Допустим, в базе данных есть Person элемент:

id: 4
name: Foo
surename: Bar
tel: 0000000000

Хорошо ли обновить этот элемент следующим образом:

p = Person(
    name='Foo'
    surename='Bar'
    tel='0000000111'
)

old_p = Person.objects.get(name='Foo', surname='Bar')
p.id = old_p.id

p.save()

Правильно ли обновлять элемент, сохраняя экземпляр модели с тем же id?

Нет. Если ваша модель Person имеет другие поля, вам необходимо скопировать все эти поля в новую запись p. В противном случае они могут быть обновлены до значений по умолчанию, которые имеет модель Person, или до неверных значений, которые вы передали в вызов p = Person(…). Это затрудняет сопровождение кода: каждый раз, когда вы добавляете новое поле в модель, вам нужно обновлять все фрагменты кода, где вы обновляете одно поле.

Если вы хотите обновить одно поле, вы можете сделать это с помощью .update(…) вызова [Django-doc]:

Person.objects.filter(name='Foo', surname='Bar').update(tel='0000000111')

или если вы хотите запускать триггеры и работать с методом .save(…) этой модели, вы можете получить объект и обновить конкретное поле, так:

p = Person.objects.get(name='Foo', surname='Bar')
p.tel = '0000000111'
p.save()
Вернуться на верх