2010-10-02 51 views
1

我想一個簡單的自定義管理器,但我不能連接自定義查詢:Django的:自定義模型管理問題

class MyManager(models.Manager):  
def some_filter(self):   
    qs = self.get_query_set() 
    return qs.filter(score__gt = 10).order_by("-score") 
class Game(models.Model):  
    score = models.IntegerField(blank=True, default=0) 
    objects = MyManager() 


games = Game.objects.filter(any_filter).some_filter()[:5] 

,但我得到查詢集」對象有沒有屬性‘some_filter’

編輯:看來,問題是如何連接自定義過濾器功能在一起:seomthing像games = Game.objects.some_filter1().some_filter2()[:5]只是不會爲我工作。

回答

3

我發現了一個辦法做到這一點之前申請some_filter()來MyManager對象。一個新的QuerySet類需要太定義

class GameQS(QuerySet): 
    def some_filter1(self): 
     return self.filter(score__gt = 10).order_by("-score") 
    def some_filter2(self): 
     return self.filter(score__gt = 50).order_by("-score") 



class GameManager(models.Manager): 
    def get_query_set(self): 
     return GameQS(self.model, using=self._db) 

    def some_filer1(self): 
     return self.get_query_set().some_filter1() 

    def some_filter2(self): 
     return self.get_query_set().some_filter2() 
4

您可以查詢集方法過濾器()

games = Game.objects.some_filter().filter(any_filter)[:5] 

否則,你應該添加some_filter方法來查詢集

+1

是的,但如果我在MyManager中定義了2個過濾器,則不能解決問題:Game.objects.some_filter()。some_filter2()將不起作用 – GabiMe 2010-10-02 22:32:21

相關問題