Django的形式错误:日期时间对象的预期字符串或类似字节的对象?

乌古斯

我有一个非常简单的django表单,用于租用密钥,该表单默认为用户提供到期日期,用户可以更改日期,然后继续保存该表单。但是每当我保存时key_instance,django都会抛出一个error: expected string or bytes-like 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

views.py:

@permission_required('catalog.can_mark_returned')
def update_key_request(request, pk):
    """
    View function for renewing a specific keyInstance by admin
    """
    key_inst=get_object_or_404(KeyInstance, pk=pk)


    # If this is a POST request then process the Form data
    if request.method == 'POST':

        # Create a form instance and populate it with data from the request (binding):
        form = UpdateKeyRequestForm(request.POST)

        # Check if the form is valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required (here we just write it to the model due_back field)
            request_status = form.cleaned_data['request_status']
            due_date = form.cleaned_data['due_date']
            if request_status == 'a':
                key_inst.due_back = due_date
                key_inst.status = 'o'
                key_inst.date_out = datetime.date.today()
                key_inst.save()
            else:
                key_inst.status = 'a'
                key_inst.save()

            # redirect to a new URL:
            return HttpResponseRedirect(reverse('all-available-keys'))
    else:
        default_due_date = datetime.date.today() + datetime.timedelta(weeks=3)
        form = UpdateKeyRequestForm(initial={'due_date': default_due_date})

    #If this is a GET (or any other method) create the default form.

    return render(request, 'catalog/roomkey_request_update.html', {'form': form, 'keyinst': key_inst})

但问题是,我使用完全相同的方法来实现此确切的逻辑来更新到期日,并且仍然可以正常工作。我很困惑为什么这会引发错误。任何人都可以阐明一下吗?

这是我在错误页面上的本地变量:

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'>
阿拉斯代尔

您的clean_due_date方法应仅返回due_date

def clean_due_date(self):
    ...
    return due_date

您似乎没有approved_status在该方法中使用,所以我将从方法中删除此行

approved_status = self.cleaned_data['request_status']

如果确实需要清理彼此依赖的字段,则应在clean()方法而不是clean_<fieldname>方法中执行此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django 中的“预期字符串或类似字节的对象”错误

TypeError:Django 中日期范围的预期字符串或类似字节的对象错误

类型错误:预期的字符串或类似字节的对象 python

获取类型错误:预期的字符串或类似字节的对象

预期的字符串或类似字节的对象错误

类型错误:带有 django Q 查询的预期字符串或类似字节的对象

TypeError:预期的字符串或类似字节的对象pandas变量

Python - TypeError:预期的字符串或类似字节的对象

TypeError:预期的字符串或类似字节的对象

Django无法查询日期时间字段。int()参数必须是字符串,类似字节的对象或数字,而不是datetime.datetime

类型错误:pandasql 中的预期字符串或类似字节的对象

re.sub错误与“预期的字符串或类似字节的对象”

无法获取要保存的模型,出现错误:“ TypeError预期的字符串或类似字节的对象”

Python文本分类错误-预期的字符串或类似字节的对象

类型错误:owlready 库中的预期字符串或类似字节的对象

类型错误:尝试从数据框中绘制数据时预期的字符串或类似字节的对象

类型错误:使用模糊匹配的 Pandas 上的预期字符串或类似字节的对象

(TypeError:预期的字符串或类似字节的对象)在Django中调用函数时

类型错误:预期的字符串或类似字节的对象。我在哪里将其更改为字符串?

获取类型错误预期的字符串或字节,如对象

Django错误:int()参数必须是字符串,类似字节的对象或数字,而不是“用户”

类型错误:预期的字符串或类似字节的对象正则表达式删除特殊字符

“类型错误:预期的字符串或类似字节的对象”,同时尝试使用 BeautifulSoup 从网页中获取数字

类型错误:使用带有链接的 httplib2 时的预期字符串或类似字节的对象

在 python 中使用正则表达式函数时出现错误“预期的字符串或类似字节的对象”

预期的字符串或字节对象,Tensorflow

在IPFS上上传文件时出错(TypeError:预期的字符串或类似字节的对象)

TypeError:预期的字符串或类似字节的对象–使用Python / NLTK word_tokenize

Pandas Dataframe中的Python Pandas NLTK令牌化列:预期的字符串或类似字节的对象