你好,
我刚刚在 python 3.5 上使用django-tastypie==0.14.1
从 Django 2.0.7 更新到 Django 2.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 实现完全兼容通常需要几周时间。
对于这一期, QUERY_TERMS
可能已被移动; 我们应该找出新的正确方法来获取 ORM 支持的 sql 术语列表,而不是重新实现它。
看起来QUERY_TERMS
被删除了。
这变成了一个相当难以解决的问题; sweetpie 严重依赖QUERY_TERMS
来快速预验证过滤器。 似乎没有一种优雅的方法可以在不彻底检查ModelResource.build_filters
的情况下重新生成这组运算符。 无论如何,这早就该了。 对一个常量列表进行验证使得在没有猴子补丁的情况下添加更多的操作符是不可能的,而全局的操作符列表意味着它将允许对没有意义的字段进行无意义的操作,比如整数字段上的不区分大小写的过滤器。
前进的道路可能是重构build_filters
以检索 Django 字段并使用新的查找 api 来验证操作。
这已在 #1564 中修复并合并到django-2.1
分支中。 由于其他测试失败(参见 #1562),该分支尚未准备好发布,但我已确认其余测试失败与QUERY_TERMS
无关,因此可以关闭此问题。
为避免进一步混淆,我将保留此问题,直到实现 2.1 支持的其余部分并将其合并到 master。
测试套件现在在 Django 2.1 下通过。 如果在那之前没有发现重大错误,我将在 9 月 3 日发布到 PyPI。
这也将放弃对 Django 1.8 的支持,该版本在 4 月就已停产。
今天发布。
似乎工作正常, @georgedorn谢谢!
最有用的评论
这已在 #1564 中修复并合并到
django-2.1
分支中。 由于其他测试失败(参见 #1562),该分支尚未准备好发布,但我已确认其余测试失败与QUERY_TERMS
无关,因此可以关闭此问题。