Django-tastypie: ImportError: não é possível importar o nome 'QUERY_TERMS' no Django 2.1

Criado em 1 ago. 2018  ·  10Comentários  ·  Fonte: django-tastypie/django-tastypie

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

django-update ready for release

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 a QUERY_TERMS portanto, esse problema pode ser encerrado.

Todos 10 comentários

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!

Esta página foi útil?
0 / 5 - 0 avaliações