关于python:如何在django 1.9中访问名称为字符串的模型

How to access a model with its name in a string in django 1.9

我想通过字符串名称访问我在Django应用程序中定义的模型及其属性。我找到了这两个解决方案,但它们不适合我的问题。

如何访问与该属性名称对应的给定字符串的对象属性

python:从字符串名称调用函数

例如:模特儿

1
2
3
Class Foo(models.Model):
    var1 = models.CharField(max_length=20)
    var2 = models.CharField(max_length=20)

现在,我有了"foo.var2"字符串,我想访问它的var2字段中的foo模型和过滤器。


您可以在包含模型的模块上使用getattr,然后在模型上应用该模块以获得模型中的字段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from app_name import models

s ="Foo.var2"
attrs = s.split('.')

my_model = my_field = None
# get attribute from module
if hasattr(models, attrs[0]):
    my_model = getattr(models, attrs[0])

    # get attribute from model
    if hasattr(my_model, attrs[1]):
        my_field = getattr(my_model, attrs[1])

# and then your query
if my_model and my_field:
    q = my_model.objects.filter(my_field="some string literal for filtering")