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
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!
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 conQUERY_TERMS
por lo que este problema se puede cerrar.