2014-05-20 3 views
1

В одном из настраиваемых полей моего ModelForm содержится pk для строки базы данных, которую нужно отредактировать. Поэтому я хотел бы сначала проверить правильность формы, затем установить экземпляр с помощью очищенного поля pk, а затем сохранить форму. Возможно ли это?Могу ли я установить экземпляр ModelForm после вызова is_valid?

Моим обходным решением сейчас является создание нового экземпляра ModelForm, который не очень опрятен.

ответ

2

Если форма перезаписать всю информацию, в случае, вы можете просто установить первичный ключ вручную:

if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.pk = form.cleaned_data['pk_to_edit'] 
    obj.save() 
    return ... 
+0

Это не новый экземпляр, это уже существующий. Так будет ли это обновление существующей строки с данным pk? – shasanoglu

+0

Да, как я уже сказал, он перепишет всю строку. Django использует наличие/отсутствие поля 'pk', чтобы определить, нужно ли делать INSERT или UPDATE, поэтому, если вы установите его вручную, он обновит эту строку. –

Смежные вопросы