假设我有以下django模型:
class ModelB(models.Model):
title = models.CharField(max_length=20)
class ModelD(models.Model):
name = models.CharField(max_length=20)
在django ORM中,我正在尝试读取字符串,它将是模型的名称,并使用它来查询。像这样:
>>b = 'ModelB'
>>b.objects.all()
这显然不起作用,因为它是一个字符串。我看过ContentType,但我不确定它在我的场景中会有什么帮助。有什么建议吗?
我还尝试对此get
执行Contentype
操作:
>>> z = ContentType.objects.get(model='modelb')
>>> z
<ContentType: model b>
>>> z.__dict__
{'model': u'modelb', '_state': <django.db.models.base.ModelState object at 0x7f195346c150>, 'id': 14, 'app_label': u'testapp'}
>>>
但我不知道如何从这里继续前进!
答案 0 :(得分:10)
如果你正在使用Django&lt; 1.7,我认为你可以做到这一点。
from django.db.models.loading import get_model
z = ContentType.objects.get(model='modelb')
ModelB = get_model(z.app_label, 'ModelB')
对于django&gt; = 1.7,你可以
from django.apps import apps
z = ContentType.objects.get(model='modelb')
ModelB = apps.get_model(z.app_label, 'ModelB')
然后,您可以使用ModelB
进行查询。