2013-05-09 40 views
7

我不能讓我的自定義經理的工作......Django的定製經理get_queryset()不工作

class PublicArtigoManager(models.Manager): 
    def get_queryset(self): 
     return super(PublicArtigoManager, self).get_queryset().filter(data_publicacao__lte=timezone.now()).filter(permissao__lte=3) 

class Artigo(models.Model): 
    ... 
    objects = models.Manager() 
    publics = PublicArtigoManager() 

當我在殼體試驗,它不工作

>>> from artigos.models import Artigo 
>>> from django.utils import timezone 
>>> print Artigo.objects.count() 
9960 
>>> print Artigo.publics.count() 
9960 
>>> print Artigo.objects.filter(data_publicacao__lte=timezone.now()).filter(permissao__lte=3).count() 
9959 

Artigo.publics.count()應該返回9959,對吧?任何想法可能會出錯?

+0

你用的是什麼版本的django?它一度是get_query_set。除此之外,我不知道。 – 2013-05-09 18:42:25

+0

是啊,我看到的是,在DOC,但我使用1.5.0 – 2013-05-09 18:46:10

+0

>>> django.VERSION (1,5,0, '最後',0) – 2013-05-09 18:46:40

回答

10

我敢肯定,問題是get_query_set方法。 This is the doc for version 1.5經理和它說:

您可以通過覆蓋Manager.get_query_set()方法來覆蓋一個經理的基本查詢集。 get_query_set()應該返回一個QuerySet和你需要的屬性。

嘗試使用的get_query_set代替get_queryset這是它是如何在dev doc解釋這樣做:

您可以通過覆蓋Manager.get_queryset()方法來覆蓋一個經理的基本查詢集。 get_queryset()應該返回一個QuerySet和你需要的屬性。

如果你想成爲100%看好方法是如何在你的版本命名就到你的Manager類定義django/db/models/manager.py和搜索如何命名在類中的方法。

希望它有幫助!

+1

+1。好趕上:) – J0HN 2013-05-09 18:57:03

+1

雖然我不喜歡這個改變。這是Django的一次突破性改變,甚至是最糟糕的一次,失敗了。如果這樣,我們會在這裏看到很多像這樣的問題!大聲笑:) – 2013-05-09 19:03:30

+0

Paulo Bu,它工作!萬萬感謝!!!!!!!!!!!! – 2013-05-10 16:37:03