Oi,
Acabei de atualizar para o Django 2.1 do Django 2.0.7 usando django-tastypie==0.14.1
no python 3.5 e encontrei este erro:
...
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'
Vou ver se consigo mais informações sobre QUERY_TERMS
A mensagem desaparece depois de alterar resource.py
para isso:
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',
}
Vou tentar criar um PR mais tarde
Geralmente leva algumas semanas para implementar a compatibilidade total para uma nova versão do Django.
Para este problema, QUERY_TERMS
provavelmente foi movido; em vez de reimplementá-lo, devemos descobrir a nova maneira correta de obter uma lista de termos sql que o ORM suporta.
Parece que QUERY_TERMS
foi removido .
Isso está se tornando um problema bastante difícil de resolver; O tastypie dependia fortemente de QUERY_TERMS
para pré-validar rapidamente os filtros. Não parece haver uma maneira elegante de regenerar esse conjunto de operadores sem revisar ModelResource.build_filters
. Isso está muito atrasado, de qualquer maneira; validar em relação a uma lista constante de operadores impossibilitava adicionar mais operadores sem patch de macaco, e a lista global de operadores significava que permitiria operações sem sentido para campos que não fazem sentido, como um filtro que não diferencia maiúsculas de minúsculas em um campo inteiro.
O caminho a seguir provavelmente é refatorar build_filters
para recuperar o campo Django e usar a nova API de pesquisas para validar a operação.
Isso foi corrigido em #1564 e mesclado no branch django-2.1
. Essa ramificação não está pronta para lançamento devido a outras falhas de teste (consulte #1562), mas confirmei que as falhas de teste restantes não estão relacionadas a QUERY_TERMS
portanto, esse problema pode ser encerrado.
Para evitar mais confusão, deixarei esse problema em aberto até que o restante do suporte 2.1 seja implementado e mesclado ao mestre.
A suíte de testes agora está passando no Django 2.1. Vou liberar para o PyPI em 9/3 se nenhum bug importante for encontrado antes disso.
Isso também eliminará o suporte para o Django 1.8, que foi encerrado em abril.
Lançado hoje.
Parece estar funcionando bem, @georgedorn Obrigado!
Comentários muito úteis
Isso foi corrigido em #1564 e mesclado no branch
django-2.1
. Essa ramificação não está pronta para lançamento devido a outras falhas de teste (consulte #1562), mas confirmei que as falhas de teste restantes não estão relacionadas aQUERY_TERMS
portanto, esse problema pode ser encerrado.