Django:apps.get_models() 从单元测试中生成模型
Django: apps.get_models() yields models from unittests
如果我调用这个 django 方法,在测试中,它会产生很多未安装的模型。
这些模型来自其他应用测试代码。
例如,当我使用apps.get_models()
时,我从django包多态测试代码中得到MROBase1
。
=> 我想获取数据库中具有 table 的所有模型。在上面的问题中,我得到了一个仅用于测试的模型,它不在数据库中。
注意: 我使用 Django 1.10
参见 所以 post。
apps.get_models()
将 return 所有已安装的模型。如果您要查找特定应用的模型列表,请执行以下操作:
from django.apps import apps
myapp = apps.get_app_config('myapp')
myapp.models #returns an OrderedDict
此外,作为参考,here's get_models()
的来源以了解其工作原理
您需要将模型与您的应用程序隔离开来:
手动创建所有应用程序名称的字符串列表:my_apps=['my_app_1', 'my_app_2', ...]
(第一个选项),使用get_app_config
和get_models
方法:
from django.apps import apps
my_app_models = {
name: list(apps.get_app_config(name).get_models()) for name in my_apps
}
你最终会得到一个 'app_name': list_of_models
的字典
(第二个选项),使用all_models[<app_name>]
属性:
from django.apps import apps
my_app_models = {name: apps.all_models[name] for name in my_apps}
你最终会得到一个 'app_name': OrderedDict_of_models
的字典
apps.get_models()
将 return 所有已安装的模型,如果您想限制 get_app_config[s] 使用的已安装应用集,您可以使用 set_available_apps:
from django.apps import apps
myapp = apps.set_available_apps(list_of_available_apps)
如果我调用这个 django 方法,在测试中,它会产生很多未安装的模型。
这些模型来自其他应用测试代码。
例如,当我使用apps.get_models()
时,我从django包多态测试代码中得到MROBase1
。
=> 我想获取数据库中具有 table 的所有模型。在上面的问题中,我得到了一个仅用于测试的模型,它不在数据库中。
注意: 我使用 Django 1.10
参见
apps.get_models()
将 return 所有已安装的模型。如果您要查找特定应用的模型列表,请执行以下操作:
from django.apps import apps
myapp = apps.get_app_config('myapp')
myapp.models #returns an OrderedDict
此外,作为参考,here's get_models()
的来源以了解其工作原理
您需要将模型与您的应用程序隔离开来:
手动创建所有应用程序名称的字符串列表:
my_apps=['my_app_1', 'my_app_2', ...]
(第一个选项),使用
get_app_config
和get_models
方法:from django.apps import apps my_app_models = { name: list(apps.get_app_config(name).get_models()) for name in my_apps }
你最终会得到一个
'app_name': list_of_models
的字典
(第二个选项),使用
all_models[<app_name>]
属性:from django.apps import apps my_app_models = {name: apps.all_models[name] for name in my_apps}
你最终会得到一个
'app_name': OrderedDict_of_models
的字典
apps.get_models()
将 return 所有已安装的模型,如果您想限制 get_app_config[s] 使用的已安装应用集,您可以使用 set_available_apps:
from django.apps import apps
myapp = apps.set_available_apps(list_of_available_apps)