Ожидается ожидаемая строка или байтовоподобный объект - PullRequest
1 голос
/ 25 апреля 2019

У меня проблема с моим приложением 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

Я думал об использовании, чтобы разыграть untouched_question_in_term_of_minutes и certain_mn_ago как int, но проблема все еще здесь.

Самое смешное, что когда я пользуюсь ipdb, кажется, что все в порядке.

Если у вас есть идеи, у меня все на слух.

update : Я нашел проблему.Именно эта date__lte часть создает проблему.

1 Ответ

1 голос
/ 25 апреля 2019

В этой строке переменная certain_mn_ago является float из-за деления.

certain_mn_ago = untouched_question_in_term_of_minutes.total_seconds() / 60 

Затем вы используете это значение float для фильтрации поля с именем date (которое яможно предположить, что это какой-то DateField):

qs.filter(date__lte=certain_mn_ago, ...

Это, скорее всего, причина вашей ошибки, потому что вы не можете сравнить float с DateField.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...