2015-10-02 60 views
0

我是Django的新手,非常感謝您的耐心。我試圖完全按照這裏概述的方式使用一個inlineformset: http://charlesleifer.com/blog/djangos-inlineformsetfactory-and-you/ 問題是,我收到一個錯誤,比如在賦值之前引用的''ingredient_formset'「。我看到這是有道理的,就提交的無效表單而言,但我不知道如何解決它,以便用戶返回帶有輸入值的表單。Django Inlineformset不工作

您能否提供有關如何解決錯誤的建議?我知道原帖是過時的。我應該嘗試更新的方法嗎?非常感謝,Carrie

回答

0

查看您發佈的鏈接中的代碼,我可以看到在任何情況下都定義了ingredient_formset變量。

也許你在縮進時犯了一個錯誤,而其他代碼塊適用於if form.is_valid()而不是if request.POST條件?

編輯:這裏有一個更好的和工作版本相同的代碼

def submit_recipe(request): 
    form = UserSubmittedRecipeForm() 
    ingredient_formset = IngredientFormSet(instance=Recipe()) 

    if request.POST: 
     form = UserSubmittedRecipeForm(request.POST) 
     if form.is_valid(): 
      recipe = form.save(commit=False) 
      ingredient_formset = IngredientFormSet(request.POST, instance=recipe) 
      if ingredient_formset.is_valid(): 
       recipe.save() 
       ingredient_formset.save() 
       return HttpResponseRedirect(reverse('recipes_submit_posted')) 
    return render_to_response("recipes/submit.html", { 
     "form": form, 
     "ingredient_formset": ingredient_formset, 
    }, context_instance=RequestContext(request)) 
+0

謝謝你的。我已經檢查了兩次,並且我的代碼中的主else代碼塊適用於if request.POST(據我所知)。我無法從遠程Unix服務器獲取我的代碼的本地副本,否則我會發布它。儘管如此,它看起來像是請求是POST,但是「if form.is_valid()」語句失敗,那麼就不會定義成分變形集。代碼不會從「if form.is_valid()」(假設失敗)跳轉到return語句的權利嗎?我想我可能會嘗試重新鍵入fn來仔細檢查縮進。 – Carrie

+0

@Carrie檢查我加的代碼 –

+0

謝謝!這讓我度過了這個特殊的障礙。 :)現在,當is_valid失敗時,用戶會被引導回表單,但是,ingredient_formset字段會被重置並丟失之前輸入的數據。 ('表單'字段會按預期顯示先前輸入的數據)原因似乎與我的原始問題有關:如果代碼在'if form.is_valid()'上失敗,它將跳轉到return語句,而且ingredient_formset不包含來自request.POST的數據。即使'form'無效,我仍然需要將POST數據放入formset中... – Carrie