Python Django表单错误:datetime对象应为字符串或类似字节的对象?

Python Django表单错误:datetime对象应为字符串或类似字节的对象?,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我有一个非常简单的django表单,用于出租密钥,默认为用户的到期日,用户可以更改日期,然后继续保存表单。但是,每当我保存key\u实例时,django就会抛出一个错误:预期的字符串或字节,如object。我知道datetime对象导致了这个错误,因为如果我把它注释掉,一切都会正常工作。这是我的views.py和forms.py forms.py: class UpdateKeyRequestForm(forms.Form): APPROVE_CHOICES = [ (

我有一个非常简单的django表单,用于出租密钥,默认为用户的到期日,用户可以更改日期,然后继续保存表单。但是,每当我保存
key\u实例时,django就会抛出一个
错误:预期的字符串或字节,如object
。我知道datetime对象导致了这个错误,因为如果我把它注释掉,一切都会正常工作。这是我的views.py和forms.py

forms.py:

class UpdateKeyRequestForm(forms.Form):

    APPROVE_CHOICES = [
        ('d', 'Deny this key request'),
        ('a', 'Approve this key request')

    ]

    request_status = forms.CharField(label='Please select to accept or deny this request.',widget=forms.Select(choices=APPROVE_CHOICES))

    due_date = forms.DateField(help_text='Enter a date (YYYY-MM-DD) between now and 4 weeks (default 3). ')

    def clean_due_date(self):
        due_date = self.cleaned_data['due_date']
        approved_status = self.cleaned_data['request_status']

        # Check date is not in past.
        if due_date < datetime.date.today():
            raise ValidationError(_('Invalid date - renewal in past'))
        if due_date > datetime.date.today() + datetime.timedelta(weeks=4):
            raise ValidationError(_('Invalid date - renewal more than 4 weeks ahead'))


        return due_date, approved_status
但问题是我用完全相同的方法实现了这个逻辑来更新到期日,它仍然可以正常工作。我很困惑为什么这个会出错。谁能帮我解释一下吗

以下是错误页面上的我的本地变量:

due_date    
(datetime.date(2018, 6, 13),)
form    
<UpdateKeyRequestForm bound=True, valid=True, fields=(due_date)>
key_inst    
<KeyInstance: Conestogo River (3fc9458a-5ec8-46a3-a04e-6a48e650b15f)>
pk  
UUID('3fc9458a-5ec8-46a3-a04e-6a48e650b15f')
request 
<WSGIRequest: POST '/catalog/key/3fc9458a-5ec8-46a3-a04e-6a48e650b15f/update'>
到期日 (日期时间日期(2018年6月13日) 形式 钥匙装置 主键 UUID('3fc9458a-5ec8-46a3-a04e-6a48e650b15f') 要求
您的
clean\u due\u date
方法应该只返回
due\u date

def clean_due_date(self):
    ...
    return due_date
您似乎没有在该方法中使用
approved\u status
,因此我将从该方法中删除这一行

approved_status = self.cleaned_data['request_status']
如果确实需要,那么应该使用
clean()
方法,而不是
clean\uu
方法

approved_status = self.cleaned_data['request_status']