2017-09-16 57 views
0

我認爲我有兩種形式:BookingFormReviewForm。我想在我的template.html中獨立提交和處理這些表單。我說在我的形式名稱標籤'booking''review'template.htmlDjango,處理多種形式。在轉讓前引用的表格

對於預訂表格,我只是想重定向,但對於ReviewForm我想在我的數據庫中創建一個記錄。

這裏是我的views.py

if request.method == "POST": 
    if 'booking' in request.POST: 
     form = BookingForm(request.POST) 
     if form.is_valid(): 
      #process the form 
      return redirect() 
    elif 'review' in request.POST: 
     review_form = BookingForm(request.POST) 
     if review_form.is_valid(): 
      review_form.save() 
      return redirect() 
else: 
    form = BookingForm() 
    review_form = ReviewForm() 
return render(request, "template.html", context={"form": form,"review_form":review_form}) 

然而,出於某種原因,我得到formreview_form被分配之前引用的錯誤。


另一件事,因爲審查模型必須與另一個模型(稱爲它的項目)相關聯。當我致電review_form.save()時,我想自動獲取商品數據並將我的評論與商品關聯。 我在想review_form['item']=kwargs['pk'](不知道這是否會奏效)。我使用的是DetailView結構,頁面中有來自urls.py的參數,與該項目相關聯,在我的視圖中存儲爲item_id=kwargs['pk']

class Review(models.Model): 
    #other fields 
    item = models.ForeignKey(Item) 

class ReviewForm(forms.ModelForm): 
    class Meta: 
     model = Review 
     fields = ('title','star','photo','name','email','body') 

回答

1

首先,將name屬性添加到窗體中什麼也不做。該值仍然不會發送到視圖。因此,您的條件在POST上都不是真的,form和booking_form都是未定義的。

執行此操作的方法是將該屬性添加到提交按鈕。

但是,這仍然會產生問題,因爲如果POST包含這些值中的一個,但該表單無效,則其他表單仍未定義。無論發佈數據是什麼,您都應確保兩者都已定義。

+0

謝謝,對不起,我添加了名稱標籤來提交按鈕。如果「預訂」中並且在語句中「審覈」,或者是否有可能有1個循環,是否需要2個單獨的內容?另外,你能否建議如何處理.save()我爲下一部分討論。我的想法會起作用嗎? – Roma

+0

我只是覺得代碼有太多的if和else語句難以閱讀 – Roma