2011-01-20 75 views
3

我有一個模型形式:的Django的ModelForm save()方法的問題

class SnippetForm(ModelForm): 
    class Meta: 
     model = Snippet 
     exclude = ['author', 'slug'] 

,我希望能夠用這個編輯特定實例:

def edit_snippet(request, snippet_id): 
    #look up for that snippet 
    snippet = get_object_or_404(Snippet, pk=snippet_id) 
    if request.user.id != snippet.author.id: 
     return HttpResponseForbidden() 
    if request.method == 'POST': 
     form = SnippetForm(data=request.POST, instance=snippet) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect(snippet.get_absolute_url()) 
    else: 
     form = SnippetForm(instance=snippet) 
    return render_to_response(SNIPPET_EDIT_TEMPLATE, 
           {'form':form, 'add':False, 'user':request.user}, 
           RequestContext(request)) 

注意,在該行

form = SnippetForm(data=request.POST, instance=snippet)

,我創建了使用從用戶提供的數據的形式,並且結合的我t使用主鍵(從url接收)找到實例。根據django documentation,當我調用save()時,應該用POSTED數據更新現有的實例。相反,我看到的是一個新的對象被創建並保存到數據庫中。什麼地方出了錯?非常感謝。

[編輯]這真的很尷尬。代碼的確沒有錯。唯一讓我感到困惑的是我放入模板中的動作(因爲我使用相同的模板來添加和編輯代碼段)....非常感謝您的幫助,非常感謝。

+1

嘗試調試它,我認爲問題可能在其他地方。 – 2011-01-20 09:55:01

+1

發佈的代碼沒有問題 - 它應該更新現有的實例。 – 2011-01-20 10:39:53

回答

1

我不明白爲什麼會發生。它是什麼版本的Django?

在任何情況下,您都可以手動強制更新傳遞相應的參數。

form = SnippetForm(data=request.POST, instance=snippet, force_update=True)