2013-02-01 22 views
2

我想要做的是能夠使用模型的名稱作爲函數的輸入,以便可以針對指定的模型執行對象方法。例如:django:使用一個字符串來選擇一個特定的模型

from app.models import model1, model2 

def select_all_from_model(model_name): 
    all = model_name.objects.all() 
    return all 

all = select_all_from_model('model1') 

all = model_name.objects.all()是無意義的行。我需要一個模型對象,而不是一個字符串名稱,objects.all()選擇工作。如何根據字符串值model_name加載模型對象?

回答

4

您可以使用models.get_model()函數:

>>> model_class = models.get_model('App', 'Model1') 
>>> model_class.objects.all() 
>>> [...] 

,如果你需要使用一個字符串,這就是。但是你可以在python中傳遞類。這裏有一個例子:

>>> from app.models import Model1 
>>> select_all_from_model(Model1) 
>>> [...] 
+0

謝謝。 'models.get_model'解決了我的問題。使分散在多個數據表中的數據變得容易得多。 – Cole

+1

不客氣。很高興它有幫助。它也解決了循環進口;) – santiagobasulto

相關問題