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建议使用自定义清理功能。

+0

嗨Mxle,非常感谢您的快速回复。这是工作。但是,请你解释为什么当我重写干净的方法时它不工作?究竟是什么造成了这里的不同? –

+1

我的想法是因为你使用_date_单词作为变量。使用这些词(和,列表,字典等)可能会导致各种不可思议的错误。 – mxle