Obter chave primária depois de salvar um ModelForm no Django

votos
33

Como faço para obter a chave primária depois de salvar um ModelForm? Depois que o formulário foi validado e salvo, eu gostaria de redirecionar o usuário para a exibição contact_details que requer a chave primária do contato.

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()
Publicado 09/04/2009 em 06:38
fonte usuário
Em outras línguas...                            


2 respostas

votos
47

O ModelForm 's save método retorna o objeto salvo.

Tente isto:

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()
Respondeu 09/04/2009 em 06:50
fonte usuário

votos
9

No caso em que você definiu form.save (commit = False) porque você quer modificar dados e você tem uma relação muitos-para-muitos, então a resposta é um pouco diferente:

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

Respondeu 06/06/2011 em 05:58
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more