如何在给定名称的Django中导入模型
给定一个标识Django模型的字符串,我必须获得类型为如何在给定名称的Django中导入模型,django,model,import,Django,Model,Import,给定一个标识Django模型的字符串,我必须获得类型为或无的关联对象 我将展示我的解决方案,它运行良好,但看起来很难看。我很高兴知道是否有更好的选择来获得同样的结果。有没有类似Django的捷径?谢谢 >>> from django.utils.importlib import import_module >>> model = 'sandbox.models.Category' >>> full_name = model.split("."
或无的关联对象
我将展示我的解决方案,它运行良好,但看起来很难看。我很高兴知道是否有更好的选择来获得同样的结果。有没有类似Django的捷径?谢谢
>>> from django.utils.importlib import import_module
>>> model = 'sandbox.models.Category'
>>> full_name = model.split(".")
>>> module_name = ".".join(full_name[:-1])
>>> class_name = full_name[-1]
>>> model = getattr(import_module(module_name), class_name, None)
>>> type(model)
<class 'django.db.models.base.ModelBase'>
来自django.utils.importlib import\u模块的>>>
>>>model='sandbox.models.Category'
>>>全名=模型分割(“.”)
>>>module_name=“.”.join(全名[:-1])
>>>类别名称=全名[-1]
>>>model=getattr(导入模块(模块名称),类名称,无)
>>>类型(型号)
存在一个shorcut get\u模型
from django.db.models import get_model
这是它的签名:
def get_model(self, app_label, model_name, seed_cache=True):
在这里,您可以如何使用它:
>>> from django.db.models import get_model
>>> model = 'amavisd.models.Domain'
>>> app_label, _, class_name = model.split('.')
>>> model = get_model(app_label, class_name)
>>> type(model)
class 'django.db.models.base.ModelBase'
例如,您可以使用以下代码
>>> from django.apps import apps
>>> apps.get_model('shop', 'Product')
<class 'shop.models.Product'>
>>>
>>从django.apps导入应用程序
>>>apps.get_模型(“商店”、“产品”)
>>>
我在django.db中找不到get_模型。django 2.0或1.11中的模型