0
我想我可能會遺漏一些關於Django表單驗證的內容,但我認爲只有當表單沒有錯誤時,表單上運行is_valid纔會返回true。Django表單通過驗證,儘管表單錯誤
我試圖讓表格返回false,如果「endTime」或「duration」沒有設置。
class NewShiftForm(forms.Form):
recursionChoices = (('1','Once'),('2','Twice'),('4','Four times'),('10','Ten times'))
endTime = forms.CharField(max_length=16, required=False)
duration = forms.CharField(max_length=16, required=False)
employee = UserModelChoiceField(queryset=User.objects.all(), required=True)
recursion = forms.ChoiceField(choices=recursionChoices, widget=forms.Select())
def clean(self):
clean_duration = self.cleaned_data.get("duration")
clean_endTime = self.cleaned_data.get("endTime")
if not clean_duration and not clean_endTime:
raise forms.ValidationError("You need either duration or end time")
return self.cleaned_data
我覺得我的清潔功能是否正常工作,因爲我看到的形式錯誤(「你需要長或結束時間」),當我呈現我的模板形式。然而,在我看來,我將它設置爲檢查表單是否被通過is_valid
def newShift(request, year, month, day, hour, minute, positionID):
form = NewShiftForm()
validity = "This form did not pass validation"
if request.POST:
form = NewShiftForm(request.POST)
if form.is_valid:
validity = "This form passed validation"
startTime = datetime.datetime(int(year), int(month), int(day), int(hour), int(minute), 0)
year = int(year)
position_name = Position.objects.filter(id=positionID)[0]
return render(request, 'managers/newShift.html',{
"form": form,
"start": startTime,
"position": position_name,
'validity': validity,
})
模板顯示有效性作爲POST之前「這種形式並沒有通過驗證」。提交後,以及POST提交後「此表單通過驗證」。
如何使表單無法驗證,如果它有表單錯誤?
非常感謝!
哦,男人當然是一個方法...呃?非常感謝您的快速回答! 並感謝您的結構化建議。我顯然是新的這一點,並欣賞指導:) – 2014-11-06 18:45:28
@RobertTownley邑,我的榮幸!隨時歡迎您詢問是否需要幫助 – doniyor 2014-11-06 18:47:53