Привет,
Я только что обновился до Django 2.1 с Django 2.0.7, используя django-tastypie==0.14.1
на python 3.5, и столкнулся с этой ошибкой:
...
File "<frozen importlib._bootstrap_external>", line 673, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "/var/www/brownpapersession/dev/brownpapersession/brownpapersession/urls.py", line 16, in <module>
from tastypie.api import Api, NamespacedApi
File "/var/www/brownpapersession/dev/env/lib/python3.5/site-packages/tastypie/api.py", line 11, in <module>
from tastypie.resources import Resource
File "/var/www/brownpapersession/dev/env/lib/python3.5/site-packages/tastypie/resources.py", line 32, in <module>
from django.db.models.sql.constants import QUERY_TERMS
ImportError: cannot import name 'QUERY_TERMS'
Я посмотрю, смогу ли я найти больше информации о QUERY_TERMS
Сообщение исчезает после изменения resource.py
на это:
try:
from django.db.models.sql.constants import QUERY_TERMS
except ImportError:
# Django 2.1
QUERY_TERMS = {
'exact', 'iexact', 'contains', 'icontains', 'gt', 'gte', 'lt', 'lte', 'in',
'startswith', 'istartswith', 'endswith', 'iendswith', 'range', 'year',
'month', 'day', 'week_day', 'hour', 'minute', 'second', 'isnull', 'search',
'regex', 'iregex',
}
Я попробую создать PR позже
Обычно для реализации полной совместимости с новой версией Django требуется несколько недель.
Для этого выпуска QUERY_TERMS
, вероятно, был перемещен; вместо того, чтобы повторно реализовать его, мы должны найти новый правильный способ получить список терминов sql, поддерживаемых ORM.
Похоже, QUERY_TERMS
удалено .
Это превращается в довольно сложную проблему; deliciouspie сильно полагался на QUERY_TERMS
для быстрой предварительной проверки фильтров. Кажется, нет изящного способа восстановить этот набор операторов без капитального ремонта ModelResource.build_filters
. Во всяком случае, это давно назрело; проверка по постоянному списку операторов сделала невозможным добавление дополнительных операторов без исправления обезьяны, а глобальный список операторов означал, что он допускал бессмысленные операции для полей, которые не имеют смысла, например фильтр без учета регистра в целочисленном поле.
Путь вперед, вероятно, заключается в рефакторинге build_filters
для извлечения поля Django и использования нового API поиска для проверки операции.
Это было исправлено в #1564 и объединено с веткой django-2.1
. Эта ветвь не готова к выпуску из-за других сбоев при тестировании (см. № 1562), но я подтвердил, что оставшиеся сбои при тестировании не связаны с QUERY_TERMS
, поэтому эту проблему можно закрыть.
Чтобы избежать дальнейшей путаницы, я оставлю этот вопрос открытым до тех пор, пока остальная часть поддержки 2.1 не будет реализована и объединена с мастером.
Набор тестов теперь проходит под Django 2.1. Я выпущу PyPI 3 сентября, если до этого не будет обнаружено серьезных ошибок.
Это также прекратит поддержку Django 1.8, который был закрыт еще в апреле.
Выпущено сегодня.
Кажется, работает нормально, @georgedorn Спасибо!
Самый полезный комментарий
Это было исправлено в #1564 и объединено с веткой
django-2.1
. Эта ветвь не готова к выпуску из-за других сбоев при тестировании (см. № 1562), но я подтвердил, что оставшиеся сбои при тестировании не связаны сQUERY_TERMS
, поэтому эту проблему можно закрыть.