在django中,如何从字符串值创建模型实例?

时间:2011-07-12 04:06:23

标签: django

所有

我有代表我的模型和字段的字符串,比如这个

modelNameStr = 'MyModel'
fieldNameStr = 'modelField'

我的模型看起来像这样;

class MyModel(models.Model):
    modelField = ForeignKey( ForeignModel )
    ...

我想要做的是使用字符串变量创建 MyModel 的实例,例如

model_instance = modelNameStr.objects.filter(fieldNameStr=ForeignModelInstance)

我该怎么做?

加特

2 个答案:

答案 0 :(得分:4)

model_instance = ContentType.objects.get(app_label=u'someapp', model=modelNameStr).model_class()(**{fieldNameStr: ForeignModelInstance})

唷!尝试快速说出 五次!但请确保使用app_label的适当值。

答案 1 :(得分:3)

检索模型类可以使用Django中的get_model函数。虽然您必须使用像my_app.MyModel这样的字符串,其中'my_app'是您的django应用程序,其中包含模型。可以通过dict实现过滤字段值。这是一个例子:

from django.db.models import get_model

modelNameStr = 'my_app.MyModel'
fieldNameStr = 'modelField'

ModelClass = get_model(*model_class.split('.'))
filters = {fieldNameStr: ForeignModelInstance}

model_instance = ModelClass.objects.filter(**filters)