Сохраняет ли 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().

Вернуться на верх