2009-04-09 31 views
32

Làm cách nào để nhận khóa chính sau khi lưu ModelForm? Sau khi biểu mẫu đã được xác thực và lưu, tôi muốn chuyển hướng người dùng đến chế độ xem contact_details yêu cầu khóa chính của liên hệ.Lấy khóa chính sau khi lưu ModelForm ở 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

Chính xác những gì tôi muốn hỏi, cảm ơn! +1 – CodyBugstein

Trả lời

47

Phương thức save trả về đối tượng đã lưu.

Hãy thử điều này:

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

Cảm ơn bạn rất nhiều! – Matt

+0

Không sao, dễ bị bỏ qua và không trực quan. ;) – monkut

+0

Chức năng 'đảo ngược' là gì? – CodyBugstein

9

Trong trường hợp bạn đã cài form.save (cam kết = False) bởi vì bạn muốn sửa đổi dữ liệu và bạn có một mối quan hệ nhiều-nhiều, thì câu trả lời là một chút khác nhau:

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

Các vấn đề liên quan