我的TransactionForm如下:
class TransactionForm(ModelForm):
start_date = forms.DateField(widget=SelectDateWidget)
duration = forms.ChoiceField(choices=duration_choices)
class Meta:
model=Transaction
fields=(
'start_date',
'duration',
)
def clean(self):
date = self.cleaned_data.get("start_date")
if date < datetime.date.today():
raise forms.ValidationError("The date cannot be in the past!")
return date
它有一个方法清理,它检查输入的日期是否至少今天或更高。当插入过去的某个日期时,它会按预期在remplate上显示错误。但是当输入有效日期时,我会收到以下错误。
&#39; datetime.date&#39;对象没有属性&#39; get&#39;
这是我的view.py文件
def packages(req):
if req.method == 'POST':
form = completeForm(req.POST)
tf = TransactionForm(req.POST)
if tf.is_valid():
return HttpResponse("Some page")
else:
errorList = tf.errors['__all__']
args={'form':form, 'errors':errorList, 'tf':tf}
return render(req,'main/common/packages.html',args)
else:
form = completeForm()
tf = TransactionForm()
args={'form':form, 'counter':1, 'tf':tf}
return render(req,'main/common/packages.html',args)
如果我从表单中删除clean方法它工作正常但我需要在不使用JavaScript验证的情况下验证日期。
我发现this最接近我的问题,但是它的解决方案不起作用或我。你能问我做错了什么吗?
答案 0 :(得分:1)
你没有验证多个字段,因此我建议尝试这个而不是def clean(self):
def clean_start_date(self):
st_date = self.cleaned_data.get("start_date")
if st_date < datetime.date.today():
raise forms.ValidationError("The date cannot be in the past!")
return st_date
编辑:如果您尝试对多个字段进行验证,那么documentation建议使用自定义清理功能就是这种情况。