首页 > 解决方案 > 期待预期的字符串或类似字节的对象

问题描述

我在我的 django 应用程序上遇到了问题,但它似乎更像是一个 python 问题,虽然我看不出问题出在哪里

这是我的代码

 for q in qs:

        untouched_question_in_term_of_minutes = (now() - q.date) #take the current date 
        #and substract the date when the question was created
        certain_mn_ago = untouched_question_in_term_of_minutes.total_seconds() / 60 
        #that gives me the number of minutes where 
        #the question has not been touched
        limit_of_mn = 50
        print(untouched_question_in_term_of_minutes)
        print(certain_mn_ago)

        if certain_mn_ago >= limit_of_mn: 
        #if the  condition is fulfilled, then the action below are done
            ae = AssociatedExpert.objects.filter(question=q, state='P')
            ae.update(state='C')
            Question.objects.filter(id=q.id, state='P').update(state='C')

            qs.filter(date__lte=certain_mn_ago, state='C').update(email='***',
                                             first_name='***',
                                             last_name='***',
                                             phone='***',
                                             extra='***')
        else:
            ae = AssociatedExpert.objects.filter(question=q,
                                                 state__in=['D', 'T', 'A',
                                                            'F']).first()
            if ae:
                qs.filter(id=q.id).update(state=ae.state)

如您所见,逻辑似乎在这里。然而,它给了我下面的追溯。

TypeError at /temp_app/question/
expected string or bytes-like object
Request Method: GET
Request URL:    http://127.0.0.1:8000/temp_app/question/
Django Version: 2.0.3
Exception Type: TypeError
Exception Value:    
expected string or bytes-like object
Exception Location: 
/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/site-packages/django/utils/dateparse.py in parse_datetime, line 107
Python Executable:  /home/andykw/cloned_projects/findoor-backend/.venv/bin/python
Python Version: 3.6.7
Python Path:    
['/home/andykw/cloned_projects/findoor-backend/findoor_backend',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python36.zip',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/lib-dynload',
 '/usr/lib/python3.6',
 '',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/site-packages',
 '/home/andykw/cloned_projects/findoor-backend/.venv/src/django-s3-upload',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/site-packages/IPython/extensions',
 '/home/andykw/.ipython',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/site-packages/odf',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/site-packages/odf',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/site-packages/odf',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/site-packages/odf',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/site-packages/odf',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/site-packages/odf',
 '/home/andykw/cloned_projects/findoor-backend/.venv/lib/python3.6/site-packages/odf']
Server time:    Thu, 25 Apr 2019 11:49:27 +0200

我考虑过使用 to cast untouched_question_in_term_of_minutesand certain_mn_agoasint但问题仍然存在。

有趣的是,当我使用 时ipdb,一切似乎都很好。

如果你有什么想法,我全听。

更新:我发现了问题。正是这date__lte部分造成了问题。

标签: pythondjango

解决方案


在这一行中,变量certain_mn_ago是 afloat因为除法。

certain_mn_ago = untouched_question_in_term_of_minutes.total_seconds() / 60 

然后您使用该float值来过滤一个名为的字段date(我假设它是某种DateField):

qs.filter(date__lte=certain_mn_ago, ...

这很可能是您的错误的原因,因为您无法将 afloat与 a进行比较DateField


推荐阅读