Django:apps.get_models() 从单元测试中生成模型

gue*_*tli -1 python django django-models django-1.10

如果我在测试中调用这个 django 方法,它会产生很多未安装的模型。
这些模型来自其他应用程序的测试代码。

例如,当我使用apps.get_models()MROBase1从django包中获取多态测试代码时。

=>我想获取数据库中有表的所有模型。在上面的问题中,我得到了一个仅用于测试而存在的模型,该模型不在数据库中。

注意:我使用 Django 1.10

Joh*_*fis 5

您需要将模型与应用程序隔离:

  1. 手动创建所有应用程序名称的字符串列表:my_apps=['my_app_1', 'my_app_2', ...]

  2. (第一种方案)、用途get_app_configget_models方法:

    from django.apps import apps
    
    my_app_models = {
        name: list(apps.get_app_config(name).get_models()) for name in my_apps
    }
    
    Run Code Online (Sandbox Code Playgroud)

    你最终会得到一本字典'app_name': list_of_models

  3. (第二个选项),使用all_models[<app_name>]属性:

    from django.apps import apps
    
    my_app_models = {name: apps.all_models[name] for name in my_apps}
    
    Run Code Online (Sandbox Code Playgroud)

    你最终会得到一本字典'app_name': OrderedDict_of_models