2011-07-24 18 views
2

有沒有辦法將自定義模型管理器應用到由默認模型管理器生成的QuerySet?結合查詢集的兩個模型管理器

我需要使用默認的模型管理器來過濾QuerySet,因爲我有一個M2M模型,並且最簡單的方法是在那裏進行過濾,而不是將自定義管理器的複雜度增加一個數量級:此過濾器如下所示:

talent_set = UserProfile.objects.filter(positions=Position.objects.get(position=filter)) 

然後我需要我的自定義模型管理器適用於這種過濾查詢,像這樣:

final_talent_set = UserProfile[filtered].custom_manager.do_something() 

有沒有辦法做到這一點,或者採用不同的方法,我應該拿?也許是將一列(從自定義管理器)追加到默認管理器的末端的一種方法?謝謝。

回答

5

嗯,爲什麼不只是使用相同的filterget_query_set()

我的意思是:

class MyManager(models.Manager): 
    def get_query_set(self): 
     return super(MyManager, self).get_query_set().filter(
      positions=Position.objects.get(position=filter) 
     ) 

    def do_something(self): 
     q = self.get_query_set() 
     # do something 
+0

Silver_Ghost:偉大謝謝。如何將變量「filter」傳遞給MyManager?如何從視圖中調用主模型?我將如何從主模型調用自定義管理器?謝謝。 – David542

+1

變量可以傳遞給'do_something()'方法,但在這種情況下,'filter'應該在'do_something'中調用:def do_something(self,filter): q = self.get_query_set() q = q。過濾器(Position.objects.get(position = filter)) – Kirill

+0

Silver_Ghost:以及如何從通過過濾器'writer'的視圖調用它 - 即相當於:'UserProfile.custom_manager(filter ='writer') .do_something()'? – David542