2011-07-24 19 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