我试图使用 apps.get_model 函数。而且,我想在不指定应用程序名称的情况下使用它,有什么办法可以做到这一点。

Jin*_*ony 0 django django-models

我指的是这个链接:Django:从字符串中获取模型? . 而且,我发现有一种方法可以通过使用 apps.get_model 来做到这一点。但是,在我的场景中,模型可以来自其他应用程序。所以,我实际上不能在这里命名 app_name。有没有办法做到这一点?

Bob*_*Bob 5

如果您不关心模型来自哪个应用程序,则可以通过以下方式进行:

from django.apps import apps

def get_model_from_any_app(model_name):

    for app_config in apps.get_app_configs():
        try:
            model = app_config.get_model(model_name)
            return model
        except LookupError:
            pass

model = get_model_from_any_app('SomeModelName')
Run Code Online (Sandbox Code Playgroud)

但在Django在不同的应用程序模型可以具有相同的名称,即你的项目可以有模式Post在你的blog应用程序和模型Post在你的news应用程序等。

因此,如果它们在应用程序中具有重复的名称(即您可能不应该这样做,想想为什么您想要半随机模型?)

解释代码的文档:https : //docs.djangoproject.com/en/2.0/ref/applications/#django.apps.apps.get_app_configs https://docs.djangoproject.com/en/2.0/ref/applications/ #django.apps.AppConfig.get_model