Django-tastypie: ImportError: no se puede importar el nombre 'QUERY_TERMS' en Django 2.1

Creado en 1 ago. 2018  ·  10Comentarios  ·  Fuente: django-tastypie/django-tastypie

Hola,

Acabo de actualizar a Django 2.1 desde Django 2.0.7 usando django-tastypie==0.14.1 en python 3.5 y encontré este error:

...
  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'

Veré si puedo encontrar más información sobre QUERY_TERMS

django-update ready for release

Comentario más útil

Esto se arregló en #1564 y se fusionó con la rama django-2.1 . Esa rama no está lista para su lanzamiento debido a otras fallas de prueba (ver #1562), pero confirmé que las fallas de prueba restantes no están relacionadas con QUERY_TERMS por lo que este problema se puede cerrar.

Todos 10 comentarios

El mensaje desaparece después de cambiar resource.py a esto:

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',
   }

Intentaré crear un PR más tarde.

Por lo general, toma algunas semanas implementar la compatibilidad total para una nueva versión de Django.

Para este problema, probablemente se movió QUERY_TERMS ; en lugar de volver a implementarlo, deberíamos descubrir la nueva forma correcta de obtener una lista de términos sql que admite ORM.

Parece que se eliminó QUERY_TERMS .

Esto se está convirtiendo en un problema bastante difícil de resolver; sabrosopie dependía en gran medida de QUERY_TERMS para prevalidar rápidamente los filtros. No parece haber una forma elegante de regenerar ese conjunto de operadores sin revisar ModelResource.build_filters . Esto es desde hace mucho tiempo, de todos modos; la validación contra una lista constante de operadores hizo imposible agregar más operadores sin parches mono, y la lista global de operadores significaba que permitiría operaciones sin sentido para campos que no tienen sentido, como un filtro que no distingue entre mayúsculas y minúsculas en un campo entero.

El camino a seguir probablemente sea refactorizar build_filters para recuperar el campo Django y usar la nueva API de búsqueda para validar la operación.

Esto se arregló en #1564 y se fusionó con la rama django-2.1 . Esa rama no está lista para su lanzamiento debido a otras fallas de prueba (ver #1562), pero confirmé que las fallas de prueba restantes no están relacionadas con QUERY_TERMS por lo que este problema se puede cerrar.

Para evitar más confusiones, dejaré este problema abierto hasta que el resto de la compatibilidad con 2.1 se implemente y se fusione con master.

El conjunto de pruebas ahora está pasando bajo Django 2.1. Lanzaré a PyPI el 3 de septiembre si no se encuentran errores importantes antes de esa fecha.

Esto también eliminará el soporte para Django 1.8, que finalizó en abril.

Lanzado hoy.

Parece estar funcionando bien, @georgedorn ¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones