問題:
在前端進行Form表單進行POST請求的時候, 需要在Django后端建立對應的Form類。 然后按照如下順序操作,便可以獲取到Form表單中對應控件的值。
form = bookQueryForm(request.POST)
if form.is_valid():
author = form.cleaned_data["author"]
但是事情往往沒有我們想象的那么順利, 比如今天筆者今天在進行一次POST請求的時候, form.is_valid()方法一直返回錯誤。
form is not vaild
筆者在前一段時間已經遇到了這個問題, 本文對當時場景已經有詳細的記錄。 本以為經過上次的折騰,再也不會踩進相同的坑里。結果還是打臉,真可謂是 not too young, also too simple
案發現場
form定義如下:
class bookQueryForm(forms.Form):
author = forms.CharField()
Form表單定義如下:
<label class="col-md-1 control-label">作者</label>
<div class="col-md-1">
<input type="text" class="form-control" id = "id_author" placeholder="請輸入作者">
</div>
XHR request請求相關代碼如下:
var form = document.getElementById('id_querybookForm');
var formData = new FormData();
formData.append('author',document.getElementById("id_author").value);
在這個場景下面發現,如果在提交之前在 id_author輸入控件中輸入了信息, 則不會出現 form is not valid的信息; 如果不輸入信息, 則就會出現錯誤信息。
解決辦法
在定義的時候Form類的時候, 對不是強制需要用戶輸入的控件,需要顯式說明
required=False
author = forms.CharField(required=False)