2009-04-09 3 views
32

Come ottengo la chiave primaria dopo aver salvato un ModelForm? Dopo che il modulo è stato convalidato e salvato, vorrei reindirizzare l'utente alla vista contact_details che richiede la chiave primaria del contatto.Ottieni la chiave primaria dopo aver salvato un ModelForm in Django

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

Esattamente quello che volevo chiedere, grazie! +1 – CodyBugstein

risposta

47

metodo s' The ModelFormsave restituisce l'oggetto salvato.

Prova questo:

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

Grazie mille! – Matt

+0

Nessun problema, questo è facilmente trascurato e non immediatamente intuitivo. ;) – monkut

+0

Che cos'è la funzione 'reverse'? – CodyBugstein

9

Nel caso in cui si è impostato form.save (commit = False) perché si vuole modificare i dati e si dispone di una relazione molti-a-molti relazione, allora la risposta è un po 'diverso:

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