【问题标题】:Django Unittest failing to run with TypeError: isinstance() arg 2 must be a type or tuple of types on one machine but not othersDjango Unittest 无法运行 TypeError: isinstance() arg 2 must be a type or tuple of types on a machine but not others
【发布时间】:2019-06-06 22:39:18
【问题描述】:

由于某种原因,我无法在我的 Windows 机器上运行“manage.py test AppNameHere”,但是当我在 linux 机器上运行它时(我不确定操作系统在这里是否真的很重要),测试运行良好。我收到此错误:

2019-01-11 17:35:32 [DEBUG] faker.factory:不在 REPL -> 保持记录器事件级别不变。 为别名“默认”创建测试数据库... 回溯(最近一次通话最后): 文件“manage.py”,第 22 行,在 execute_from_command_line(sys.argv) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\__init__.py”,第 381 行,在 execute_from_command_line 实用程序.execute() 执行中的文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\__init__.py”,第 375 行 self.fetch_command(子命令).run_from_argv(self.argv) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\commands\test.py”,第 26 行,在 run_from_argv super().run_from_argv(argv) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\base.py”,第 316 行,在 run_from_argv self.execute(*args, **cmd_options) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\base.py”,第 353 行,在执行中 输出 = self.handle(*args, **options) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\commands\test.py”,第 56 行,在句柄中 失败 = test_runner.run_tests(test_labels) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\test\runner.py”,第 604 行,在 run_tests old_config = self.setup_databases() setup_databases 中的文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\test\runner.py”,第 551 行 self.parallel, **kwargs 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\test\utils.py”,第 174 行,在 setup_databases serialize=connection.settings_dict.get('TEST', {}).get('SERIALIZE', True), 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\base\creation.py”,第 68 行,在 create_test_db run_syncdb=真, 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\__init__.py”,第 148 行,在 call_command return command.execute(*args, **defaults) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\base.py”,第 353 行,在执行中 输出 = self.handle(*args, **options) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\base.py”,第 83 行,已包装 res = handle_func(*args, **kwargs) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\commands\migrate.py”,第 203 行,在句柄中 fake_initial=fake_initial, 迁移中的文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\migrations\executor.py”,第 117 行 state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) _migrate_all_forwards 中的文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\migrations\executor.py”,第 147 行 state = self.apply_migration(状态,迁移,fake=fake,fake_initial=fake_initial) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\migrations\executor.py”,第 244 行,在 apply_migration state = migration.apply(state, schema_editor) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\migrations\migration.py”,第 124 行,在应用中 operation.database_forwards(self.app_label,schema_editor,old_state,project_state) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\migrations\operations\fields.py”,第 84 行,在 database_forwards 场地, 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\sqlite3\schema.py”,第 309 行,在 add_field self._remake_table(模型,create_field=field) _remake_table 中的文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\sqlite3\schema.py”,第 181 行 self.effective_default(create_field) 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\base\schema.py”,第 218 行,位于有效默认值中 默认 = field.get_default() 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\fields\related.py”,第 927 行,在 get_default 如果是实例(field_default,self.remote_field.model): TypeError: isinstance() arg 2 必须是类型或类型的元组

这看起来是 Django 出了点问题,但我不确定。有人对此有任何见解吗?我不想从跟踪中修改任何这些文件,因为它们是 Django 的一部分。

【问题讨论】:

    标签: django python-3.x


    【解决方案1】:

    如何更改代码 文件“C:\Users\personA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\fields\related.py”,第 927 行,在 get_default

    if isinstance(field_default, type(self.remote_field.model)):

    【讨论】:

    • 这里的问题是该文件属于 Django 库。我不想直接从文件中覆盖他们的代码。
    【解决方案2】:

    我通过以下方式解决了这个问题:

    • 删除我的所有迁移文件
    • 删除 django_migrations 表中的条目
    • 重新进行迁移 (makemigrations)
    • 做了迁移 --fake

    【讨论】:

    • 这个迁移提示帮助了我。我的问题是我在我的一个迁移文件中手动删除了dependencies 之一,因为dependencies 有两个不同的应用程序,我需要克服它,因为我的数据库没有正确应用迁移。删除其中一个导致我的 django 测试失败
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    相关资源
    最近更新 更多