Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как работает параметр commit в методе save формы? [RSS Feed]

#1 Ноя. 9, 2009 10:49:11

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как работает параметр commit в методе save формы?

Вот, так сказать, переопределяю метод save формы (которая, при этом наследуется от ModelForm) и, поставив трейс, обнаруживаю, что у меня пустой внешний ключ модели (форму создаю с параметром instance и передаю туда объект, часть данных которого редактируется в этой форме), погуглил, добавил в начало некий код:

m = super(ProfileSellerForm, self).save(commit=False)
Оппа, и теперь в m имеем правильный объект? Может кто-то по быстрому разжевать как это работает? а то работа жмет, как с каждой мелочью разбираться буду, то застрелюсь =)



Офлайн

#2 Ноя. 9, 2009 12:29:52

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Как работает параметр commit в методе save формы?

чтение доки займёт минуты 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.

Офлайн

#3 Ноя. 9, 2009 13:54:20

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как работает параметр commit в методе save формы?

slav0nic
чтение доки займёт минуты 2 wink
не сейвит изменения в базу
Да, спасибо, действительно очень просто и недолго, только непонятно пока зачем такой подход (сначала сейвим с False, потом сами “досохраняем”), почему нельзя просто переопределить save и делать дальше что положено?



Офлайн

#4 Ноя. 9, 2009 16:45:09

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Как работает параметр commit в методе save формы?

если тебе после этого надо заменить значение поля на другое, а в другом случае не делать этого и тп.

Офлайн

#5 Ноя. 9, 2009 16:55:43

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как работает параметр commit в методе save формы?

slav0nic
если тебе после этого надо заменить значение поля на другое, а в другом случае не делать этого и тп.
Так а не проще сразу сохранить, как мне надо (то есть сразу создать “правильный объект”, а не создавать “неправильный” и заменять значения аттрибутов)?

Или я не так понял?



Офлайн

#6 Ноя. 9, 2009 18:31:49

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Как работает параметр commit в методе save формы?

если есть готовая форма, которая что-то делает (не в 2 строки), то не проще

Офлайн

#7 Ноя. 9, 2009 20:54:39

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как работает параметр commit в методе save формы?

slav0nic
если есть готовая форма, которая что-то делает (не в 2 строки), то не проще
Можно пример, где именно могут возникнуть сложности? (я думаю не только мне будет интересно).



Офлайн

#8 Ноя. 9, 2009 22:07:13

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Как работает параметр commit в методе save формы?

if form.is_valid():
item = form.save(commit=False)
item.added_by = request.user
item.save()

Офлайн

  • Начало
  • » Django
  • » Как работает параметр commit в методе save формы?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version