django: создать объект из конструктора или модели - PullRequest
2 голосов
/ 28 марта 2012

После получения данных из формы модели, основанной на модели, скажем

form_data = MyModelForm(request.POST)

Затем я могу создать экземпляр модели с помощью

instance = Model(**form_data.cleaned_data)

или

instance = form_data.save()

Интересно, какой путь предпочтительней в мире джанго

1 Ответ

7 голосов
/ 28 марта 2012

Между ними есть существенная разница.

instance = Model(**form_data.cleaned_data) не сохраняет объект в базе данных. Он создает только локальный экземпляр.

instance = form_data.save() добавляет объект в базу данных (он выполняет фиксацию, если это поддерживается), а также имеет побочный эффект запуска проверки.

Если вы хотите выполнить пользовательскую постобработку объекта перед его сохранением, вы передаете commit=False методу save().

instance = form_data.save(commit=False)
# do some stuff with instance
instance.save()
...