Django自定义管理器get_queryset()不工作 [英] Django custom manager get_queryset() not working
问题描述
我不能让我的自定义管理器工作...
I can't make my custom manager work...
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中测试时,它不工作
when I test in the shell, It doesnt work
>>> 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,对吧?任何想法可能会出错?
Artigo.publics.count()
should return 9959, right? Any ideas what might be going wrong?
推荐答案
我确定问题是 get_query_set
方法。 这是1.5版本的经理文档,它说:
I'm sure the problem is the get_query_set
method. This is the doc for version 1.5 managers and it says:
您可以通过覆盖Manager.get_query_set()方法来覆盖Manager的基本QuerySet。 get_query_set()应该返回一个具有所需属性的QuerySet。
You can override a Manager‘s base QuerySet by overriding the Manager.get_query_set() method. get_query_set() should return a QuerySet with the properties you require.
尝试使用 get_query_set
而不是
get_queryset
这是如何在 dev doc :
您可以通过覆盖Manager.get_queryset来覆盖Manager的基本QuerySet () 方法。 get_queryset()应该返回一个具有您需要的属性的QuerySet。
You can override a Manager‘s base QuerySet by overriding the Manager.get_queryset() method. get_queryset() should return a QuerySet with the properties you require.
如果要对方法命名为100%在您的版本中,只需在 django / db / models / manager.py
中的管理器
类定义中,搜索如何命名为课程中的方法。
If you want to be 100% positive about how the method is named in your version just go to your Manager
class definition in django/db/models/manager.py
and search how is named the method in the class.
希望有帮助!
这篇关于Django自定义管理器get_queryset()不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!