問題:
在前端進行Form表單進行POST請求的時候亿昏, 需要在Django后端建立對應(yīng)的Form類筏餐。 然后按照如下順序操作莺治,便可以獲取到Form表單中對應(yīng)控件的值。
form = bookQueryForm(request.POST)
if form.is_valid():
author = form.cleaned_data["author"]
但是事情往往沒有我們想象的那么順利酌畜, 比如今天筆者今天在進行一次POST請求的時候怎囚, form.is_valid()方法一直返回錯誤。
form is not vaild
筆者在前一段時間已經(jīng)遇到了這個問題, 本文對當時場景已經(jīng)有詳細的記錄恳守。 本以為經(jīng)過上次的折騰考婴,再也不會踩進相同的坑里。結(jié)果還是打臉催烘,真可謂是 not too young沥阱, also too simple
案發(fā)現(xiàn)場
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請求相關(guān)代碼如下:
var form = document.getElementById('id_querybookForm');
var formData = new FormData();
formData.append('author',document.getElementById("id_author").value);
在這個場景下面發(fā)現(xiàn),如果在提交之前在 id_author輸入控件中輸入了信息伊群, 則不會出現(xiàn) form is not valid的信息考杉; 如果不輸入信息, 則就會出現(xiàn)錯誤信息舰始。
解決辦法
在定義的時候Form類的時候崇棠, 對不是強制需要用戶輸入的控件,需要顯式說明
required=False
author = forms.CharField(required=False)