如何在Django中明确地将Model标识为小写字符串

时间:2014-12-31 10:53:51

标签: python django

我想将模型名称作为URL参数传递,因此我可以使用它来访问视图中的指定模型类。例如:

  

/ app_label /模型名称

views.py

from django.db.models.loading import get_model
model = get_model(app_label, model_name)

问题是 - 我希望我的网址不区分大小写。因此,我不能只使用上面的代码,因为其中一个模型可能如下所示:

  

MyModel,MySuperModel,MyAwesomeSuperModel

有没有办法明确地将模型识别为小写字符串?

我考虑过使用 table_name ,但这意味着每次处理请求时都会遍历项目中的每个模型。效率不高。

2 个答案:

答案 0 :(得分:1)

我担心您将不得不迭代app的模型列表,但您可以缓存它:

from django.core.exceptions import ImproperlyConfigured
from django.db.models import get_app, get_models

APPS_MODELS = {}

def get_model(app_name, model_name):

    app_models = APPS_MODELS.get(app_name)
    if app_models:
        return app_models.get(model_name)

    try:
        app = get_app(app_name)
    except ImproperlyConfigured: # no such app
        return None

    APPS_MODELS[app_name] = dict((model._meta.model_name, model)
                                     for model in get_models(app))

    return APPS_MODELS[app_name].get(model_name)

答案 1 :(得分:0)

your_model_object.__class__.__name__.lower()

为您提供模型名称的小写名称,如果它可以帮助您

相关问题