やあ、
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
で詳細情報を見つけることができるかどうかを確認します
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ありがとうございます!
最も参考になるコメント
これは#1564で修正され、
django-2.1
ブランチにマージされました。 そのブランチは他のテスト失敗のためにリリースの準備ができていません(#1562を参照)が、残りのテスト失敗はQUERY_TERMS
とは無関係であるため、この問題を解決できることを確認しました。