Найти - Пользователи
Полная версия: Как работает параметр commit в методе save формы?
Начало » Django » Как работает параметр commit в методе save формы?
1
regall
Вот, так сказать, переопределяю метод save формы (которая, при этом наследуется от ModelForm) и, поставив трейс, обнаруживаю, что у меня пустой внешний ключ модели (форму создаю с параметром instance и передаю туда объект, часть данных которого редактируется в этой форме), погуглил, добавил в начало некий код:
m = super(ProfileSellerForm, self).save(commit=False)
Оппа, и теперь в m имеем правильный объект? Может кто-то по быстрому разжевать как это работает? а то работа жмет, как с каждой мелочью разбираться буду, то застрелюсь =)
slav0nic
чтение доки займёт минуты 2 ;)
не сейвит изменения в базу
This save() method accepts an optional commit keyword argument, which accepts either True or False. If you call save() with commit=False, then it will return an object that hasn't yet been saved to the database. In this case, it's up to you to call save() on the resulting model instance. This is useful if you want to do custom processing on the object before saving it, or if you want to use one of the specialized model saving options. commit is True by default.
regall
slav0nic
чтение доки займёт минуты 2 wink
не сейвит изменения в базу
Да, спасибо, действительно очень просто и недолго, только непонятно пока зачем такой подход (сначала сейвим с False, потом сами “досохраняем”), почему нельзя просто переопределить save и делать дальше что положено?
slav0nic
если тебе после этого надо заменить значение поля на другое, а в другом случае не делать этого и тп.
regall
slav0nic
если тебе после этого надо заменить значение поля на другое, а в другом случае не делать этого и тп.
Так а не проще сразу сохранить, как мне надо (то есть сразу создать “правильный объект”, а не создавать “неправильный” и заменять значения аттрибутов)?

Или я не так понял?
slav0nic
если есть готовая форма, которая что-то делает (не в 2 строки), то не проще
regall
slav0nic
если есть готовая форма, которая что-то делает (не в 2 строки), то не проще
Можно пример, где именно могут возникнуть сложности? (я думаю не только мне будет интересно).
slav0nic
if form.is_valid():
item = form.save(commit=False)
item.added_by = request.user
item.save()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB