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

时间:2013-05-09 18:26:39

标签: python django python-2.7 django-models

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

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()

当我在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

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

1 个答案:

答案 0 :(得分:12)

我确定问题是get_query_set方法。 This is the doc for version 1.5经理们说:

  

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

尝试使用get_query_set代替get_queryset,而dev doc中的解释如下:

  

您可以通过覆盖Manager.get_queryset()方法来覆盖Manager的基本QuerySet。 get_queryset()应该返回一个QuerySet,其中包含您需要的属性。

如果您想对您的版本中方法的命名方式100%肯定,请转到Manager中的django/db/models/manager.py类定义,然后搜索如何在类中命名该方法。

希望它有所帮助!