Django-tastypie: ImportError: невозможно импортировать имя «QUERY_TERMS» в Django 2.1

Созданный на 1 авг. 2018  ·  10Комментарии  ·  Источник: django-tastypie/django-tastypie

Привет,

Я только что обновился до 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

django-update ready for release

Самый полезный комментарий

Это было исправлено в #1564 и объединено с веткой django-2.1 . Эта ветвь не готова к выпуску из-за других сбоев при тестировании (см. № 1562), но я подтвердил, что оставшиеся сбои при тестировании не связаны с QUERY_TERMS , поэтому эту проблему можно закрыть.

Все 10 Комментарий

Сообщение исчезает после изменения 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 Спасибо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги