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

Querying a django model using a model name string input

假设我有以下 Django 模型:

class ModelB(models.Model):
    title = models.CharField(max_length=20)

class ModelD(models.Model):
    name = models.CharField(max_length=20)

在 django ORM 中,我正在尝试读取一个 string,它将是 model 的名称,并将其用于询问。像这样:

>>b = 'ModelB'
>>b.objects.all()

这显然是行不通的,因为它是一个字符串。我看过 ContentType 但我不确定它对我的情况有何帮助。有什么建议吗?

我也试过对 Contentype 进行 get 操作,如下所示:

>>> 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'}
>>>

但我不知道如何从这里继续下去!

如果您使用的 Django < 1.7,我认为您可以做到这一点。

from django.db.models.loading import get_model

z = ContentType.objects.get(model='modelb')
ModelB = get_model(z.app_label, 'ModelB')

对于 django >= 1.7,你可以

from django.apps import apps

z = ContentType.objects.get(model='modelb')
ModelB = apps.get_model(z.app_label, 'ModelB')

然后就可以使用ModelB查询了。