2009-04-09 6 views
32

Wie bekomme ich den Primärschlüssel nach dem Speichern einer ModelForm? Nachdem das Formular validiert und gespeichert wurde, möchte ich den Benutzer in die Ansicht contact_details umleiten, für die der Primärschlüssel des Kontakts erforderlich ist.Primärschlüssel nach dem Speichern einer ModelForm in Django erhalten

def contact_create(request): 
    if request.method == 'POST': 
     form = ContactForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect(reverse(contact_details, args=(form.pk,))) 
    else: 
     form = ContactForm() 
+0

Genau das, was ich fragen wollte, danke! +1 – CodyBugstein

Antwort

47

Die ModelForm ‚s save Methode gibt das gespeicherte Objekt.

Try this:

def contact_create(request): 
    if request.method == 'POST': 
     form = ContactForm(request.POST) 
     if form.is_valid(): 
      new_contact = form.save() 
      return HttpResponseRedirect(reverse(contact_details, args=(new_contact.pk,))) 
    else: 
     form = ContactForm() 
+0

Vielen Dank! – Matt

+0

Kein Problem, das wird leicht übersehen und nicht sofort intuitiv. ;) – monkut

+0

Was ist mit der 'reverse' Funktion? – CodyBugstein

9

In dem Fall, dass Sie form.save gesetzt haben (Commit = False), weil Sie Daten ändern möchten und Sie haben eine many-to-many-Beziehung, dann ist die Antwort ein bisschen anders:

def contact_create(request): 
    if request.method == 'POST': 
     form = ContactForm(request.POST) 
     if form.is_valid(): 
      new_contact = form.save(commit=False) 
      new_contact.data1 = "gets modified" 
      new_contact.save() 
      form.save_m2m() 
      return HttpResponseRedirect(reverse(contact_details, args=(new_contact.pk,))) 
    else: 
     form = ContactFrom() 

https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/#the-save-method

Verwandte Themen