2011-09-08 8 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)、 私は最初のMyModelFormを作成するために使用した主キー「some_id」に「何でも」を置き換える必要があります。どこから手に入りますか? – WesDec

0

可能とわずかに短い:

instance = MyModel.objects.get(whatever) 
form = MyModelForm(request.POST or None, instance=instance) 
... 
関連する問題