2016-08-08 4 views
0

フォームを使用してモデルエントリを更新したいとします。問題は、エントリを更新する代わりに、新しいエントリを作成することです。フォームを使用したDjangoアップデートモデルエントリが失敗する

def edit(request, c_id): 
    instance = get_object_or_404(C, id=int(c_id)) 

    if request.POST: 
     form = CForm(request.POST, instance=instance) 
     if form.is_valid(): 
      form.save() 

      return redirect('/a/b', c_id) 
    else: 
     form = CForm(instance=instance) 

     args = {} 
     args.update(csrf(request)) 
     args['form'] = form 
     args['c_id'] = c_id 

     return render_to_response('a/b.html', args) 

HTMLコード:

<form action="https://stackoverflow.com/a/edit/{{ c_id }}/" method="post"> 
    {% csrf_token %} 
    {% for field in form %} 
     <div class="fieldWrapper"> 
      {{ field.errors }} 
      {{ field.label_tag }} {{ field }} 
      {% if field.help_text %} 
       <p class="help">{{ field.help_text|safe }}</p> 
      {% endif %} 
     </div> 
    {% endfor %} 
    <input type="submit" value="Submit"/> 
</form> 

CFormクラスコード

class CForm(forms.ModelForm): 
    class Meta: 
     model = C 
     fields = ['name', 'code'] 
+0

フォームをレンダリングするために使用しているHTMLであなたの質問を更新してください。 – Soviut

+0

@Soviut @Soviut私はそれを更新しました – spoke

+0

@Alasdair私は今CFormクラスを追加しました – spoke

答えて

2

あなたは間違ってPOST方法に対する要求をチェックしています。 request.POSTはブール値ではなく、ポスト変数の辞書を含んでおり、常にCSRFトークンを持っているので、常に真実になります。必要なのはrequest.methodです。代わりの

if request.POST: 

でそれを置き換えます

if request.method == "POST": 
+0

これはまだ動作しませんありがとうございます。データベースに別のエントリを追加するだけです – spoke

関連する問題