是否可以动态地将QuerySet模型指定为字符串?

时间:2011-04-06 18:23:47

标签: django

我正在尝试动态地在Django中构建一个查询。我有很多我想为其构建查询的模型,但我不想编写模型的名称,我想将其作为字符串传递。

from django.db.models.query import QuerySet
a_works = QuerySet(model_A)
a_doesnt_work = QuerySet("model_A")  # I want this to work, too

a_works.filter(pk=23)   # no error
a_doesnt_work.filter(pk=23)   # error: AttributeError: 'str' object has no attribute '_meta'

# then I am dynamically filtering different fields, which works fine with a_works
kwargs = { "%s__%s" % (field, oper) : val }
results = a_works.filter( **kwargs )

有没有办法让动态模型选择工作?

1 个答案:

答案 0 :(得分:10)

不要尝试通过QuerySet类本身构建查询集。你应该经常通过模特的经理。

您可以通过get_model中定义的django.db.models函数获取模型。它需要应用程序名称和型号名称的参数。

from django.db.models import get_model
model = get_model('myapp', 'modelA')
model.objects.filter(**kwargs)