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) 错误被删除了。让我们看看在 运行 完整申请后它是否会留下任何问题。