Сохраняет ли Django объекты модели помимо методов `save()` или `create()`?
Я пишу что-то вроде следующего:
class Foo(models.Model):
a = models.CharField()
def f(foo: Foo) -> Foo:
y = Foo(
**{field.name: getattr(foo, field.name) for field in foo._meta.get_fields()}
) # copy foo with pk
y.a = "c"
return y
Меня беспокоит вопрос, сохраняются ли y
в БД до того, как пользователи вызовут метод save()
. Может ли это произойти?
Оно не сохраняется. Вам нужно фактически вызвать y.save()
, чтобы обновленные поля были сохранены в БД.
В этом случае можно сделать save
более эффективным, указав поля, которые действительно изменились:
y.save(update_fields=['a'])
Нет, экземпляр y не будет сохранен в БД до того, как пользователи вызовут метод save(). Если вы хотите сохранить новый экземпляр y в базе данных, вам нужно вызвать y.save().