Django自定义管理器get_queryset()无法正常工作

Ale*_*nko 8 python django django-models python-2.7

我不能让我的自定义经理工作......

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()
Run Code Online (Sandbox Code Playgroud)

当我在shell中测试时,它不起作用

>>> 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
Run Code Online (Sandbox Code Playgroud)

Artigo.publics.count()应该返回9959,对吗?什么想法可能会出错?

Pau*_* Bu 12

我确定问题是get_query_set方法.这是1.5版管理员的文档,它说:

您可以通过覆盖Manager.get_query_set()方法来覆盖Manager的基本QuerySet.get_query_set()应返回具有所需属性的QuerySet.

尝试使用它get_query_set而不是get_querysetdev doc中解释它的方式:

您可以通过覆盖Manager.get_queryset()方法来覆盖Manager的基本QuerySet.get_queryset()应返回具有所需属性的QuerySet.

如果你想100%肯定你的版本Managerdjango/db/models/manager.py如何命名方法,只需转到你的类定义并搜索如何在类中命名方法.

希望能帮助到你!