2016-08-08 29 views
0

Ich möchte einen Modelleintrag mithilfe eines Formulars aktualisieren. Das Problem besteht darin, dass der Eintrag neu erstellt wird, anstatt den Eintrag zu aktualisieren.Django Update-Modelleintrag mit Formular schlägt fehl

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-Code:

<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 Klassencode

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

Bitte aktualisieren Sie Ihre Frage mit dem html Sie das Formular machen verwenden. – Soviut

+0

@Soviut Ich habe es aktualisiert – spoke

+0

@Alasdair Ich habe die CForm-Klasse jetzt hinzugefügt – spoke

Antwort

2

Sie fälschlicherweise die Anforderung für eine POST Methode zu überprüfen. request.POST ist kein Boolean, es enthält ein Dictionary von Post-Variablen und wird immer das CSRF-Token haben, so dass es immer "truthy" wird. Was Sie brauchen, ist request.method.

Statt:

if request.POST: 

Ersetzen Sie es mit:

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

es funktioniert immer noch nicht. Es fügt nur einen weiteren Eintrag in der Datenbank hinzu – spoke