Django:apps.get_model()从单元测试中产生模型

问题描述 投票:-1回答:3

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

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

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

注意:我使用Django 1.10

python django django-models django-1.10
3个回答
4
投票

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

  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 } 你最终会得到一张'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} 你最终会得到一张'app_name': OrderedDict_of_models字典

2
投票

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

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

1
投票

this SO帖子。

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

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

此外,作为参考,here's get_models()的来源,看看它是如何工作的

© www.soinside.com 2019 - 2024. All rights reserved.