2012-02-16 16 views
0

私はあるページにフォームを作成していますが、別のページでフォームを取り出そうとしています(既にそこに保存されているデータが入力されています)、変更したい私がそれを保存すると、別のインスタンスを作成するのではなくインスタンスを上書きするようにします。私は、フォームが正常にすべてのデータが事前に入力され、このページを開くとDjangoテーブルの既存のインスタンスを上書きする

def edit(request): 

    a = request.session.get('a', None) 

    if a is None: 
     raise Http404('a was not found') 

    if request.method == 'POST': 
     form = Name_Form(request.POST, instance=a) 
     if form.is_valid(): 
      j = form.save(commit=False) 
      j.save() 
    else: 
     form = Name_Form(instance = a) 

これは..私は「製作中のフォーム」ビューを持っているコードです。しかし、変更して保存すると、既存のインスタンスを上書きしないで、新しいインスタンスを作成します。

アイデア?

答えて

0

ここをクリックしてください:https://docs.djangoproject.com/en/dev/ref/models/instances/#how-django-knows-to-update-vs-insert これはあなたに役立つと思います。

更新: もっと「明示的な」方法はどうでしょうか。 id_of_Nameは、編集したいモデルのIDまたはpkだけを格納しているとします(モデルは「名前」と呼ばれていると仮定します)。次に、セッションからid/pkを取得して、モデルインスタンスのデータベースを照会します。また、フォーム上のsaveメソッドを直接呼び出そうとします。 PKはプロセスで失われるよう

def edit(request): 

    id_of_Name = request.session.get('a', None) 

    if id_of_Name is None: 
     raise Http404('id_of_Name was not found') 
    instance = Name.objects.get(pk=id_of_Name) 
    if request.method == 'POST': 
     form = Name_Form(request.POST, instance=instance) 
     if form.is_valid(): 
      form.save() 
    else: 
     form = Name_Form(instance = instance) 
+0

は、これに応じて、しかし、私はすでに... – JohnnyCash

+0

うーんを動作するはずやって、それはそうです。 save(force_update = True)は機能しませんか? – Jingo

+0

これはまだ動作しません:( – JohnnyCash

関連する問題