Джанго: как обойти ошибку «Ключевое слово не может быть выражением» - PullRequest
0 голосов
/ 29 сентября 2018

В приведенном ниже коде capitals_listings_from_latest_Celery_scrape - это QuerySet из Listing объектов модели:

capitals_listings_from_latest_Celery_scrape = capitals_listings_all.filter(date_added.date()=latest_Celery_scrape_date)

Однако в настоящее время я получаю

"Ключевое слово не может бытьвыражение "

ошибка в этой строке из-за date_added.date() части.

Причина, по которой я использую .date(), заключается в том, чтобы правильно оценить date_added против latest_Celery_scrape_date Мне нужно убрать date_added из данных времени и оставить только год, месяц и день.

Как исправить ошибку?

1 Ответ

0 голосов
/ 29 сентября 2018

Проблема в том, что вы делаете вызов как ключевое слово (имя параметра), тогда как имя параметра должно быть идентификатором:

capitals_listings_from_latest_Celery_scrape = capitals_listings_all.filter(
    <s><b>date_added.date()</b></s>=latest_Celery_scrape_date
)

Если вы используете такой синтаксис, вы действительно получите эту ошибку, дляпример:

>>> id(<b><s>id()</s></b>=3)
  File "", line 1
SyntaxError: keyword can't be an expression

Однако в Django есть поиск для этого: поиск __date [Django-doc] .Таким образом, вы можете сделать запрос, например:

capitals_listings_from_latest_Celery_scrape = capitals_listings_all.filter(
    date_added<b>__date</b>=latest_Celery_scrape_date
)

Обратите внимание, однако, что date метки времени сама по себе является сложной проблемой, так как можно стремиться найти дату в этом конкретном часовом поясе или данныеэта отметка времени в текущем часовом поясе.

Как указано в документации для поиска __date:

Когда USE_TZ равно True, поля преобразованы в текущий часовой пояс перед фильтрацией.

...