2016-08-08 38 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我已經更新了 – spoke

+0

@Alasdair我已經添加了CForm類 – spoke

回答

2

你檢查一個POST方法不正確的請求。 request.POST不是一個布爾值,它包含一個後期變量字典,並且始終會有CSRF標記,因此它始終是「truthy」。你需要的是request.method

相反的:

if request.POST: 

將其替換爲:

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

它仍然無法正常工作。它只是在數據庫中添加了另一個條目 – spoke