我想创建一个像
def dynamic_model(model_name,**kwargs)
obj=model_name.object.create(**dct)
return obj
因为我不想一次又一次地创建对象并将它们保存在数据库中。你在函数中传递模型名称,然后根据传递的 **kwargs 创建对象。我如何导入路径运行时以及函数体是什么。
*主要是我不知道哪个模型以及它从哪里导入。所有东西在运行时都可以看到我,所以我如何在函数中导入与模型名称有关的路径*
我想创建一个像
def dynamic_model(model_name,**kwargs)
obj=model_name.object.create(**dct)
return obj
因为我不想一次又一次地创建对象并将它们保存在数据库中。你在函数中传递模型名称,然后根据传递的 **kwargs 创建对象。我如何导入路径运行时以及函数体是什么。
*主要是我不知道哪个模型以及它从哪里导入。所有东西在运行时都可以看到我,所以我如何在函数中导入与模型名称有关的路径*
你可以eval()
在这里使用。但请记住,此解决方案带有红色警报。
def dynamic_model(model_name,**kwargs)
obj = eval(model_name + ".object.create(**dct)")
return obj
eval()
将字符串解释为代码。因此,您在使用它时需要非常小心。例如,始终确保 eval 的字符串绝不是用户直接输入的。并清理正在传递的字符串。
不过可以安全使用。在这里阅读。
我真的不明白这个功能的意义,但如果你想做这样的事情,你永远不应该使用eval()
它。
你可以试试这个
from django.db.models.loading import get_model
def dynamic_model(app_name, model_name,**kwargs)
# app_name and model_name should be plain strings
# the name of your app and model
klass = get_model(app_name, model_name)
obj = klass.object.create(**kwargs)
return obj
你不必导入任何你只需要传递纯字符串的东西,即你的应用程序和模型的名称,它将返回所需的模型类