retrieving Django object returns AttributeError: module 'types' has no attribute 'StringTypes'
retrieving Django object returns AttributeError: module 'types' has no attribute 'StringTypes'
我正在尝试将我的应用程序从 py2 迁移到 py3,但在 运行 迁移脚本时我 运行 遇到了这个错误。经过一番挖掘,我在做 MyModel.objects.get(id=<some_id>)
时遇到了同样的错误
现在,我知道 StrginType
在 python3 中已过时,我在我的脚本中删除了所有 basestring
并替换为 string
(不确定是否相关),但是我不确定这个错误是在哪里触发的。我是 运行 Django 1.11 所以它应该是兼容的。
这似乎与 Django 有关,但我不知道是什么。我在 django doc 上搜索了一无所获。
有人在通过 django 检索对象之前遇到过同样的错误吗?
编辑:
完整追溯
Traceback (most recent call last):
File "manage.py", line 45, in <module>
main()
File "manage.py", line 41, in main
execute_from_command_line(sys.argv)
File "<some_domain>/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "<some_domain>/lib/python3.6/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "<some_domain>/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "<some_domain>/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "<some_domain>/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 204, in handle
fake_initial=fake_initial,
File "<some_domain>/lib/python3.6/site-packages/django/db/migrations/executor.py", line 115, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "<some_domain>/lib/python3.6/site-packages/django/db/migrations/executor.py", line 145, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "<some_domain>/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration
state = migration.apply(state, schema_editor)
File "<some_domain>/lib/python3.6/site-packages/django/db/migrations/migration.py", line 129, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "<some_domain>/lib/python3.6/site-packages/django/db/migrations/operations/special.py", line 193, in database_forwards
self.code(from_state.apps, schema_editor)
File "<some_domain>/<path_to_migration>/migrations/<migration file>.py", line 10, in <some module>
<some model name> = apps.get_model(<someapp>, <some_model>)
File "<some_domain>/lib/python3.6/site-packages/django/db/models/query.py", line 250, in __iter__
self._fetch_all()
File "<some_domain>/lib/python3.6/site-packages/django/db/models/query.py", line 1102, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "<some_domain>/lib/python3.6/site-packages/django/db/models/query.py", line 62, in __iter__
for row in compiler.results_iter(results):
File "<some_domain>/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 834, in results_iter
row = self.apply_converters(row, converters)
File "<some_domain>/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 819, in apply_converters
value = converter(value, expression, self.connection, self.query.context)
File "<some_domain>/lib/python3.6/site-packages/encrypted_fields/fields.py", line 160, in from_db_value
return self.to_python(value)
File "<some_domain>/lib/python3.6/site-packages/encrypted_fields/fields.py", line 163, in to_python
if value is None or not isinstance(value, types.StringTypes):
AttributeError: module 'types' has no attribute 'StringTypes'
您使用的库 "encrypted-fields" 与 Python 不兼容 3. 查看该项目的 repo,它已经三年多没有更新了,所以出现被遗弃。
有多种选择 - 快速 Google 发现 encrypted-model-fields 可能适合您。
我已将 types.py 更新为
GenericAlias = type(sys.implementation)
错误被删除了。让我们看看在 运行 完整申请后它是否会留下任何问题。
我正在尝试将我的应用程序从 py2 迁移到 py3,但在 运行 迁移脚本时我 运行 遇到了这个错误。经过一番挖掘,我在做 MyModel.objects.get(id=<some_id>)
现在,我知道 StrginType
在 python3 中已过时,我在我的脚本中删除了所有 basestring
并替换为 string
(不确定是否相关),但是我不确定这个错误是在哪里触发的。我是 运行 Django 1.11 所以它应该是兼容的。
这似乎与 Django 有关,但我不知道是什么。我在 django doc 上搜索了一无所获。
有人在通过 django 检索对象之前遇到过同样的错误吗?
编辑:
完整追溯
Traceback (most recent call last):
File "manage.py", line 45, in <module>
main()
File "manage.py", line 41, in main
execute_from_command_line(sys.argv)
File "<some_domain>/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "<some_domain>/lib/python3.6/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "<some_domain>/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "<some_domain>/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "<some_domain>/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 204, in handle
fake_initial=fake_initial,
File "<some_domain>/lib/python3.6/site-packages/django/db/migrations/executor.py", line 115, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "<some_domain>/lib/python3.6/site-packages/django/db/migrations/executor.py", line 145, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "<some_domain>/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration
state = migration.apply(state, schema_editor)
File "<some_domain>/lib/python3.6/site-packages/django/db/migrations/migration.py", line 129, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "<some_domain>/lib/python3.6/site-packages/django/db/migrations/operations/special.py", line 193, in database_forwards
self.code(from_state.apps, schema_editor)
File "<some_domain>/<path_to_migration>/migrations/<migration file>.py", line 10, in <some module>
<some model name> = apps.get_model(<someapp>, <some_model>)
File "<some_domain>/lib/python3.6/site-packages/django/db/models/query.py", line 250, in __iter__
self._fetch_all()
File "<some_domain>/lib/python3.6/site-packages/django/db/models/query.py", line 1102, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "<some_domain>/lib/python3.6/site-packages/django/db/models/query.py", line 62, in __iter__
for row in compiler.results_iter(results):
File "<some_domain>/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 834, in results_iter
row = self.apply_converters(row, converters)
File "<some_domain>/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 819, in apply_converters
value = converter(value, expression, self.connection, self.query.context)
File "<some_domain>/lib/python3.6/site-packages/encrypted_fields/fields.py", line 160, in from_db_value
return self.to_python(value)
File "<some_domain>/lib/python3.6/site-packages/encrypted_fields/fields.py", line 163, in to_python
if value is None or not isinstance(value, types.StringTypes):
AttributeError: module 'types' has no attribute 'StringTypes'
您使用的库 "encrypted-fields" 与 Python 不兼容 3. 查看该项目的 repo,它已经三年多没有更新了,所以出现被遗弃。
有多种选择 - 快速 Google 发现 encrypted-model-fields 可能适合您。
我已将 types.py 更新为
GenericAlias = type(sys.implementation)
错误被删除了。让我们看看在 运行 完整申请后它是否会留下任何问题。