使用模型名称字符串输入查询django模型

时间:2015-04-13 01:01:50

标签: python django django-orm

假设我有以下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'}
>>>

但我不知道如何从这里继续前进!

1 个答案:

答案 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进行查询。