Форум сайта python.su
Вот, так сказать, переопределяю метод save формы (которая, при этом наследуется от ModelForm) и, поставив трейс, обнаруживаю, что у меня пустой внешний ключ модели (форму создаю с параметром instance и передаю туда объект, часть данных которого редактируется в этой форме), погуглил, добавил в начало некий код:
m = super(ProfileSellerForm, self).save(commit=False)
Офлайн
чтение доки займёт минуты 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.
Офлайн
slav0nicДа, спасибо, действительно очень просто и недолго, только непонятно пока зачем такой подход (сначала сейвим с False, потом сами “досохраняем”), почему нельзя просто переопределить save и делать дальше что положено?
чтение доки займёт минуты 2 wink
не сейвит изменения в базу
Офлайн
если тебе после этого надо заменить значение поля на другое, а в другом случае не делать этого и тп.
Офлайн
slav0nicТак а не проще сразу сохранить, как мне надо (то есть сразу создать “правильный объект”, а не создавать “неправильный” и заменять значения аттрибутов)?
если тебе после этого надо заменить значение поля на другое, а в другом случае не делать этого и тп.
Офлайн
если есть готовая форма, которая что-то делает (не в 2 строки), то не проще
Офлайн
slav0nicМожно пример, где именно могут возникнуть сложности? (я думаю не только мне будет интересно).
если есть готовая форма, которая что-то делает (не в 2 строки), то не проще
Офлайн
if form.is_valid():
item = form.save(commit=False)
item.added_by = request.user
item.save()
Офлайн