Django:TypeError:' datetime.date'对象没有属性' get'

时间:2017-02-27 04:21:35

标签: python django python-datetime

我的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最接近我的问题,但是它的解决方案不起作用或我。你能问我做错了什么吗?

1 个答案:

答案 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建议使用自定义清理功能就是这种情况。