Django-tastypie: ImportError:Django2.1で名前「QUERY_TERMS」をインポートできません

作成日 2018年08月01日  ·  10コメント  ·  ソース: django-tastypie/django-tastypie

やあ、

Python3.5 django-tastypie==0.14.1を使用してDjango2.0.7からDjango2.1にアップデートしたところ、次のエラーが発生しました。

...
  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の新しいリリースとの完全な互換性を実装するには、通常、数週間かかります。

この1つの問題では、 QUERY_TERMSが移動された可能性があります。 再実装するのではなく、ORMがサポートするSQL用語のリストを取得するための新しい正しい方法を理解する必要があります。

QUERY_TERMSが削除されたようです。

これは解決するのがかなり難しい問題になりつつあります。 tastypieは、フィルターをすばやく事前検証するためにQUERY_TERMSに大きく依存していました。 ModelResource.build_filtersをオーバーホールせずに、その演算子のセットを再生成するための適切な方法はないようです。 とにかく、これは長い間延期されています。 演算子の定数リストに対して検証すると、モンキーパッチなしで演算子を追加することができなくなりました。また、演算子のグローバルリストは、整数フィールドの大文字と小文字を区別しないフィルターのように、意味のないフィールドに対して無意味な操作を許可することを意味しました。

フォワードパスはおそらくbuild_filtersをリファクタリングしてDjangoフィールドを取得し、新しいルックアップAPIを使用して操作を検証しています。

これは#1564で修正され、 django-2.1ブランチにマージされました。 そのブランチは他のテスト失敗のためにリリースの準備ができていません(#1562を参照)が、残りのテスト失敗はQUERY_TERMSとは無関係であるため、この問題を解決できることを確認しました。

さらなる混乱を避けるために、残りの2.1サポートが実装され、マスターにマージされるまで、この問題を開いたままにしておきます。

テストスイートは現在、Django2.1で合格しています。 それまでに大きなバグが見つからない場合は、9/3にPyPIにリリースします。

これにより、4月にEOLされたDjango1.8のサポートも終了します。

本日リリース。

正常に動作しているようです、 @ georgedornありがとうございます!

このページは役に立ちましたか?
0 / 5 - 0 評価