Обновление элемента с помощью экземпляра модели 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()