2011-07-12 29 views
2

所有,在Django中,我如何创建一个字符串值的模型实例?

我有一个代表我的模型和领域的字符串,这样

modelNameStr = 'MyModel' 
fieldNameStr = 'modelField' 

我的模型看起来像这样;

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

我想要做的就是创建一个使用字符串变量的的为MyModel例如,像

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

我怎样才能做到这一点?

迦特

回答

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

唷!试试说快五倍!但请确保您使用app_label的适当值。

+0

该死!你是如何掌握所有这些... – gath

+0

我们如何使用ContentType的过滤器? – gath

+0

...什么? –

3

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

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) 
相关问题