Подтвердить что ты не робот

Должно ли get_or_create() сэкономить сразу? (Джанго)

Мне нужно использовать что-то вроде get_or_create(), но проблема в том, что у меня много полей, и я не хочу устанавливать значения по умолчанию (что не имеет смысла в любом случае), и если я не задаю значения по умолчанию он возвращает ошибку, потому что он сохраняет объект сразу.

Я могу установить поля в null = True, но я не хочу нулевые поля.

Есть ли какой-либо другой метод или какой-либо дополнительный параметр, который может быть отправлен в get_or_create(), чтобы он создавал экземпляр объекта, но не сохраняет его, пока я не вызову save() на нем?

Спасибо.

4b9b3361

Ответ 1

Вы можете просто сделать:

try:
    obj = Model.objects.get(**kwargs)
except Model.DoesNotExist:
    obj = Model(**dict((k,v) for (k,v) in kwargs.items() if '__' not in k))

что в значительной степени означает get_or_create, sans commit.