Django的:类型错误:“datetime.date”对象有没有属性“得到”
问题描述:
我有TransactionForm如下:Django的:类型错误:“datetime.date”对象有没有属性“得到”
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
它有干净的方法,检查如果输入的日期至少是今天或更大。当插入过去的某个日期时,它会按照预期显示移除的错误。但是当输入有效的日期时,我收到以下错误。
'datetime.date' object has no attribute 'get'
这里是我的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)
如果我从表单中删除干净的方法,它工作正常,但我需要验证日期时不使用JavaScript验证。
我发现this问题最接近我的,但其解决方案不工作或我。你能否请我做错什么?
答
你不验证在多个领域,因此,我建议尝试的这个代替高清干净(个体经营):
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建议使用自定义清理功能。
嗨Mxle,非常感谢您的快速回复。这是工作。但是,请你解释为什么当我重写干净的方法时它不工作?究竟是什么造成了这里的不同? –
我的想法是因为你使用_date_单词作为变量。使用这些词(和,列表,字典等)可能会导致各种不可思议的错误。 – mxle