所有
我有代表我的模型和字段的字符串,比如这个
modelNameStr = 'MyModel'
fieldNameStr = 'modelField'
我的模型看起来像这样;
class MyModel(models.Model):
modelField = ForeignKey( ForeignModel )
...
我想要做的是使用字符串变量创建 MyModel 的实例,例如
model_instance = modelNameStr.objects.filter(fieldNameStr=ForeignModelInstance)
我该怎么做?
加特
答案 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)