【问题标题】:How to import a model in Django given the name如何在给定名称的Django中导入模型
【发布时间】:2011-07-29 09:40:48
【问题描述】:

给定一个标识 Django 模型的字符串,我必须获取 <class 'django.db.models.base.ModelBase'> 或 None 类型的关联对象。

我将展示我的解决方案,它工作正常,但看起来很难看。我很高兴知道是否有更好的选择来获得相同的结果。是否存在类似 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 model import


    【解决方案1】:

    存在一个捷径 get_model。

    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'
    

    django 1.8+ 可以使用以下代码

    >>> from django.apps import apps
    >>> apps.get_model('shop', 'Product')
    <class 'shop.models.Product'>
    >>> 
    

    【讨论】:

    • 我在 django 2.0 或 1.11 的 django.db.models 中找不到 get_model
    猜你喜欢
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2017-07-31
    相关资源
    最近更新 更多