我尝试在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 )
有没有办法让动态模型选择起作用?
2条答案
按热度按时间nxowjjhe1#
不要尝试通过QuerySet类本身构建查询集,你应该总是通过模型的管理器。
可以通过
django.db.models
中定义的get_model
函数获取模型,该函数的参数为应用名称和模型名称。3df52oht2#
参考:https://stackoverflow.com/a/75168880/7212249
如何使用?
并使用它来获取查询的动态模型名称