0

我想创建一个像

def dynamic_model(model_name,**kwargs)
    obj=model_name.object.create(**dct)
    return obj

因为我不想一次又一次地创建对象并将它们保存在数据库中。你在函数中传递模型名称,然后根据传递的 **kwargs 创建对象。我如何导入路径运行时以及函数体是什么。

*主要是我不知道哪个模型以及它从哪里导入。所有东西在运行时都可以看到我,所以我如何在函数中导入与模型名称有关的路径*

4

2 回答 2

2

你可以eval()在这里使用。但请记住,此解决方案带有红色警报。

def dynamic_model(model_name,**kwargs)
    obj = eval(model_name + ".object.create(**dct)")
    return obj

eval()将字符串解释为代码。因此,您在使用它时需要非常小心。例如,始终确保 eval 的字符串绝不是用户直接输入的。并清理正在传递的字符串。

不过可以安全使用。在这里阅读。

于 2013-07-12T12:43:47.897 回答
1

我真的不明白这个功能的意义,但如果你想做这样的事情,你永远不应该使用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

你不必导入任何你只需要传递纯字符串的东西,即你的应用程序和模型的名称,它将返回所需的模型类

于 2013-07-13T07:12:55.297 回答