2014-05-20 157 views
1

我的ModelForm的其中一個自定義字段包含要編輯的數據庫行的pk。因此,我想首先檢查表單是否有效,然後使用已清理的pk字段設置實例,然後保存表單。它甚至有可能嗎?我可以在調用is_valid後設置ModelForm的實例嗎?

我現在的解決方法是創建一個新的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,因此如果您手動設置它,它將更新該行。 –

相關問題