我想将模型名称作为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 ,但这意味着每次处理请求时都会遍历项目中的每个模型。效率不高。
答案 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()
为您提供模型名称的小写名称,如果它可以帮助您