2017-02-27 111 views
0

我有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問題最接近我的,但其解決方案不工作或我。你能否請我做錯什麼?

回答

1

你不驗證在多個領域,因此,我建議嘗試的這個代替高清乾淨(個體經營):

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

相關問題