2008-12-10 82 views
8

我有幾個模型,並希望返回屬於用戶的所有模型的查詢集,我想知道是否有可能從多個模型返回一個QuerySet?跨模型的Django Queryset?

+0

Duplicate:http://stackoverflow.com/questions/313137/using-django-how-can-i-combine-two-queries-from-separate-models-into-one-query – 2008-12-10 21:32:08

回答

8

我假設你的意思是你想從每個模型中返回屬於該用戶的所有對象的單個查詢集。

你需要一個查詢集還是隻是一個迭代? AFAIK,異構qs是不可能的。然而,你可以輕鬆地返回一個列表,一個鏈式迭代器(itertools)或一個生成器來做你想做的事情。這假設提前知道引用用戶的模型。假設默認related_name,相關查詢集的屬性可以從用戶實例通過模型的名稱訪問:

qs = getattr(user, '%s_set' % model_name.lower()); 

當然,使用任何異構列表,你要麼只能使用領域或會在所有這些模型中定義的方法,否則你將不得不確定每個對象的類型來執行任何類型特定的操作。

3

您的模型必須包含關係字段(ForeigKey和ManyToManyField),並設置related_name關鍵字參數。檢查文檔here