Django公司:apps.get_型号()从单元测试中生成模型

2024-06-16 12:07:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,当我使用apps.get_models()时,我从django包多态性测试代码得到MROBase1。在

=>;我要获取数据库中有表的所有模型。在上面的问题中,我得到了一个只用于测试的模型,它不在数据库中。在

注意:我使用Django 1.10


Tags: appsdjango方法模型gt数据库应用程序get
3条回答

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

  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
    }
    

    你将在字典里

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

    ^{pr2}$

    您将得到一个'app_name': OrderedDict_of_models

    的字典

请参阅thisSO post。在

apps.get_models()将返回所有已安装的型号。如果要查找特定应用程序的模型列表,请执行以下操作:

from django.apps import apps
myapp = apps.get_app_config('myapp')
myapp.models #returns an OrderedDict

另外,作为参考,here'sget_models()的源代码,以了解它是如何工作的

apps.get_models()将返回所有已安装的模型,如果要限制get_app_config使用的已安装应用程序集,则可以使用set_available_apps

from django.apps import apps
myapp = apps.set_available_apps(list_of_available_apps)

相关问题 更多 >