2015-05-19 73 views
3

我在努力理解如何從兩個django表單提交數據到相同視圖的兩個單獨的數據庫表中。我只想要一個提交按鈕。雖然this問題讓我更接近解決方案,但我遇到了錯誤,數據沒有寫入數據庫。我認爲這段代碼實際上檢查了兩個表單,而不是一次提交兩個表單。有任何想法嗎?Django中的2種形式,1種視圖,2種SQL表格

以下是我所嘗試的:

對於一種形式 - >一張表。這工作,所以這是一個開始。

# views.py 
def BookFormView(request): 
    if request.method == 'POST': 
    form = BookForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect("/books/") 
    else: 
     form = BookForm() 
    return render(request, 'books/createbooks.html', 
       {'form' : form}) 

然而,當我從forms.py添加這種形式來獲得後續views.py我得到local variable 'book_form' referenced before assignment。這通常是一個簡單的全局vs局部變量問題,但我不知道這意味着什麼。

def BookFormView(request): 
    if request.method == 'POST': 
     if 'book' in request.POST: 
      book_form = BookForm(request.POST, prefix='book') 
      if book_form.is_valid(): 
       book_form.save() 
       return HttpResponseRedirect("/books/") 

      bookdetailsform = BookDetailsForm(prefix='bookdetails') 
     elif 'bookdetails' in request.POST: 
      bookdetailsform = BookDetailsForm(request.POST, prefix='bookdetails') 
      if bookdetailsform.is_valid(): 
       bookdetailsform.save() 
       return HttpResponseRedirect("/books/") 

      book_form = BookForm(prefix='book') 
    else: 
     book_form = BookForm(prefix='book') 
     bookdetailsform = BookDetailsForm(prefix='bookdetails') 
    return render(request, 'books/createbook.html', 
      {'book_form' : book_form, 
      'bookdetailsform': bookdetailsform}) 
+0

爲什麼你有兩個獨立的IFS發佈('book'和'bookdetail'),因爲你只需要一個邏輯路徑時,即節省兩種形式? – Wtower

+0

有趣。誠實的答案是我不知道;我正在嘗試使用其他SO答案來拼湊一些可行的東西。我不明白的是如何使用一個「如果」。明白了嗎? – Nancy

回答

1

def BookFormView(request): 
    if request.method == 'POST': 
      book_form = BookForm(request.POST, prefix='book') 
      bookdetailsform = BookDetailsForm(request.POST, prefix='bookdetails') 
      if book_form.is_valid() and bookdetailsform.is_valid(): 
       book_form.save() 
       bookdetailsform.save() 
       return HttpResponseRedirect("/books/") 
    else: 
     book_form = BookForm(prefix='book') 
     bookdetailsform = BookDetailsForm(prefix='bookdetails') 
    return render(request, 'books/createbook.html', 
        {'book_form': book_form, 'bookdetailsform': bookdetailsform}) 
+0

我的問題類似於最初的問題,並且解決了類似的問題,但現在又遇到了另外一個問題。如果第二個表單對第一個表單返回的實例應該有外部字段,那麼你如何建議將它傳遞給那裏?例如:'BookDetails'模型應該將ForeignKey設置爲'Book'。考慮到'book = book_form.save()',如何將'book'傳遞給'bookdetailsform'? –

+0

我強烈建議您打開一個包含所有細節的新問題,我將非常樂意爲您提供幫助。 – Wtower

+0

這是我的相關問題http://stackoverflow.com/questions/30329804/one-html-form-several-interrelated-django-forms-how-to-save –

0

我認爲問題是,當用戶提交一個bookdetails post請求,
if 'book' in request.POST:條件下處理。爲什麼?
因爲字符串bookdetails包含字符串book,不管他們的請求類型如何,它都會以if book in request.POST:的條件處理。

我相信如果條件問題是第一步就解決。基於這個問題的意見