2011-09-08 38 views
25

我創建了一個ModelForm類,以便能夠創建和編輯數據庫條目。創建新條目效果很好,但是,我不知道如何使用ModelForms來編輯/更新現有條目。我可以用實例與數據庫實例的ModelForm:Django:使用ModelForm編輯現有數據庫條目

form = MyModelForm(instance=MyModel.objects.get(pk=some_id)) 

然而,當我通過這一個模板和編輯字段,然後嘗試將其保存,我創建一個新的數據庫條目,而不是更新「SOME_ID」 ?

EDIT1: 這是我的看法

def editData(request): 
if request.method == 'POST': 
    form = MyModelForm(request.POST, request.FILES) 

    if form.is_valid(): 
     editedEntry = form.save() # <-- creates new entry, instead of updating 
+0

您可以發佈您views.py? –

回答

38

記住,你仍然需要當實例上POST使用instance參數。

instance = MyModel.objects.get(whatever) 
if request.method == "POST": 
    form = MyModelForm(request.POST, instance=instance) 
    ... 

else: 
    form = MyModelForm(instance=instance) 
+1

好吧,我沒有那樣做。那麼我應該如何將我的主鍵「some_id」傳遞給html模板,然後再返回到視圖。我應該手動做一個隱藏的表單域還是有辦法讓Django照顧它? – WesDec

+0

沒有必要這樣做。只要使用上面顯示的模式。 –

+0

但要這樣做:instance = MyModel.objects.get(whatever), 我需要用主鍵「some_id」替換「whatever」,我用它來創建初始MyModelForm。我從哪裏得到的? – WesDec

0

也有可能和稍短:

instance = MyModel.objects.get(whatever) 
form = MyModelForm(request.POST or None, instance=instance) 
...