8

我无法让我的自定义管理器工作...

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,对吗?有什么想法可能会出错吗?

4

1 回答 1

14

我确定问题出在get_query_set方法上。这是 1.5 版管理器的文档,上面写着:

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

尝试使用它来get_query_set代替dev docget_queryset中解释的方式:

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

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

希望能帮助到你!

于 2013-05-09T18:55:20.030 回答