查看您發佈的鏈接中的代碼,我可以看到在任何情況下都定義了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))
謝謝你的。我已經檢查了兩次,並且我的代碼中的主else代碼塊適用於if request.POST(據我所知)。我無法從遠程Unix服務器獲取我的代碼的本地副本,否則我會發布它。儘管如此,它看起來像是請求是POST,但是「if form.is_valid()」語句失敗,那麼就不會定義成分變形集。代碼不會從「if form.is_valid()」(假設失敗)跳轉到return語句的權利嗎?我想我可能會嘗試重新鍵入fn來仔細檢查縮進。 – Carrie
@Carrie檢查我加的代碼 –
謝謝!這讓我度過了這個特殊的障礙。 :)現在,當is_valid失敗時,用戶會被引導回表單,但是,ingredient_formset字段會被重置並丟失之前輸入的數據。 ('表單'字段會按預期顯示先前輸入的數據)原因似乎與我的原始問題有關:如果代碼在'if form.is_valid()'上失敗,它將跳轉到return語句,而且ingredient_formset不包含來自request.POST的數據。即使'form'無效,我仍然需要將POST數據放入formset中... – Carrie