Получить первичный ключ после сохранения ModelForm в Django - PullRequest
37 голосов
/ 09 апреля 2009

Как получить первичный ключ после сохранения ModelForm? После того, как форма была проверена и сохранена, я бы хотел перенаправить пользователя в представление contact_details, для которого требуется первичный ключ контакта.

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()

Ответы [ 2 ]

51 голосов
/ 09 апреля 2009

Метод ModelForm save возвращает сохраненный объект.

Попробуйте это:

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()
10 голосов
/ 06 июня 2011

В случае, если вы установили form.save (commit = False), потому что вы хотите изменить данные и у вас есть отношение многие ко многим, тогда ответ будет немного другим:

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

...