2016-06-28 17 views
3

私はdjangoアプリケーションで文字列名で定義したモデルとその属性にアクセスしたいと思います。 私はこれら2つの解決策を見つけましたが、私の質問には合わないのです。例えばdjangoの文字列にその名前のモデルにアクセスする方法1.9

Python: call a function from string name

: models.py

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

は今、私は "Foo.var2" の文字列を持っていると私はその中のFooモデルとフィルターにアクセスしたいですvar2フィールド。

+1

どのようにして、その文字列を取得するのですか? –

答えて

4

あなたはモデルを含むモジュールにgetattrを使用して、モデル内のフィールドを取得するためのモデルで同じように適用することができます。

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") 
関連する問題