给定一个 django 模型,我如何为它自动生成有效的导入?我有一个严格的内部函数(只有开发人员会使用它),它接受一个模型并返回一些关于它的信息。问题是,我不知道如何动态导入东西:
例如,我的应用程序结构可能是:
-myproject
--books
--music
功能:
def my_func(Model):
from appname.models import Model
## Rest of function here ##
有没有一种方法可以根据模型自动生成导入?我正在考虑访问 _meta 属性以获取 app_label 但显然,需要导入才能访问 Model._meta。任何想法将不胜感激。
我认为
get_model
是你需要的。
from django.db.models.loading import get_model
model = get_model('appname', 'ModelName')
现在你可以做到了。
objects = model.objects.all()
您可以使用
importlib
动态导入模块,这允许您将包指定为第二个参数。
import importlib
mod = importlib.import_module('modulename', 'packagename')
如果你想让你的模块名称与你的模型类匹配,你可以试试这个:
ModelClass.__name__
使用
__import__
函数并将模型作为字符串传入。
def my_func(Model):
modelVar = __import__("appname.models"+Model)
这是对 Rag Sagar 回答的更新。
get_model
的位置在当前的 django 版本(4.1,截至撰写本文时)上有所不同。
>>> from django.apps import apps
>>> model = apps.get_model("app_label", "ModelName")
>>> model
<class 'app_label.models.ModelName'>
或使用替代语法:
>>> model = apps.get_model("app_label.modelname")
>>> model
<class 'app_label.models.ModelName'>
文档参考:https://docs.djangoproject.com/en/4.1/ref/applications/#django.apps.apps.get_model