使用模型名称字符串输入查询 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
查询了。
假设我有以下 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
查询了。