Ger*_*erd 50 python django python-3.x graphql graphene-django
我正在使用 python、graphene 和 django 实现 graphql 解决方案,但出现以下导入错误:
Result: Failure Exception: ImportError: cannot import name 'force_text' from 'django.utils.encoding'
"/home/site/wwwroot/.python_packages/lib/site-packages/graphene_django/utils/utils.py", line 6, in <module> from django.utils.encoding import force_text
Run Code Online (Sandbox Code Playgroud)
我不确定版本以及是否需要导入额外的模块。我的requirements.txt是这样的:
graphene>=2.1,<3
graphene-django>=2.1,<3
graphql-core>=2.1,<3
graphql-relay==2.0.1
django-filter>=2
Run Code Online (Sandbox Code Playgroud)
有人遇到过类似的问题吗?可以看看我使用的版本吗?谢谢
Osm*_*man 83
在 django 4.0 中我们没有force_text
https://docs.djangoproject.com/en/4.0/ref/utils/#module-django.utils.encoding
改为force_textforce_str
linux:
YOUR_VENV/lib/PYTHON_VERSION/site-packages/graphene_django/utils/utils.py
视窗:
YOUR_VENV/lib/site-packages/graphene_django/utils/utils.py
from django.utils.encoding import force_text
Run Code Online (Sandbox Code Playgroud)
到
from django.utils.encoding import force_str
Run Code Online (Sandbox Code Playgroud)
和
def _camelize_django_str(s):
if isinstance(s, Promise):
s = force_text(s)
return to_camel_case(s) if isinstance(s, six.string_types) else s
Run Code Online (Sandbox Code Playgroud)
到
def _camelize_django_str(s):
if isinstance(s, Promise):
s = force_str(s)
return to_camel_case(s) if isinstance(s, six.string_types) else s
Run Code Online (Sandbox Code Playgroud)
Bla*_*aze 32
基于@Osman 给出的答案。
该问题似乎发生在 Django-4 上。在PR合并之前,这个猴子补丁可能会起作用(未在产品中测试):
import django
from django.utils.encoding import force_str
django.utils.encoding.force_text = force_str
Run Code Online (Sandbox Code Playgroud)
将其放入入口文件中。我暂时将其保留在settings.py 中。
小智 14
在 Django 版本 4> 中,只需将此代码片段粘贴到您的settingsg.py 中。最好是在顶部
import django
from django.utils.encoding import force_str
django.utils.encoding.force_text = force_str
Run Code Online (Sandbox Code Playgroud)
小智 12
force_text已从Django 4.0中删除,但旧版本的graphene_django仍在. *您可以看到4.0 中删除的功能。force_textutils.py
因此,升级graphene-django可以轻松解决该错误:
pip install graphene-django --upgrade
Run Code Online (Sandbox Code Playgroud)
或者,替换force_text为force_str如下所示:
# "utils.py"
# from django.utils.encoding import force_text # Line 6
from django.utils.encoding import force_str # Line 6
# s = force_text(s) # Line 29
s = force_str(s) # Line 29
Run Code Online (Sandbox Code Playgroud)
这些是Linux和Windowsutils.py的路径:
Linux:
<your_venv>/lib/<python_version>/site-packages/graphene_django/utils/utils.py
视窗:
<your_venv>/lib/site-packages/graphene_django/utils/utils.py
| 归档时间: |
|
| 查看次数: |
59264 次 |
| 最近记录: |