【问题标题】:Querying a django model using a model name string input使用模型名称字符串输入查询 django 模型
【发布时间】:2015-06-18 05:47:10
【问题描述】:

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

但我不知道如何从这里进一步前进!

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    如果你使用的是 Django

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

    【讨论】:

    • apps 实际上在 1.7 中可用。另外,appsdjango.apps 中的一个对象,所以你需要from django.apps import apps; apps.get_model(...)
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多