看来我已经通过升级到 Django 1.6 解决了这个问题。只是好奇,到底是怎么回事。
我正在尝试将OSQA与现有的 Django 应用程序集成,但遇到了一些非常微妙的问题。看看——这是一个 PDB 会话,没有多重继承:
(Pdb) p type(self.get_query_set())
<class 'django.db.models.query.QuerySet'>
(Pdb) p type(self.get_queryset())
<class 'forum.models.node.NodeQuerySet'>
在 Django 1.5 中,默认的方法django.db.models.Manager
(all
如MyModel.objects.all()
)指向get_query_set()
. 在 Django 1.6 中,同样的方法指向,因为,我猜,已经被弃用了。顺便说一句,这是 同一文件的行。128
django/db/models/manager.py
get_queryset
get_query_set
133
事实上,OSQA 在 Django 1.5 中被破坏了它失败了
*** AttributeError: AttributeError("'QuerySet' object has no attribute 'filter_state'",)
,因为在forum/views/readers.py
, line207
中,它确实
questions = initial.filter_state(deleted=False)
,并且没有这样的功能。在这种情况下,它作为 传递Question.objects.all()
,initial
但不知何故它最终是django.db.models.query.QuerySet
而不是
forum.models.node.NodeQuerySet
,它确实具有所需的方法。
(Pdb) from forum.models import Question
(Pdb) type(Question.objects.all())
<class 'django.db.models.query.QuerySet'>
(Pdb) type(Question.objects.get_queryset())
<class 'forum.models.node.NodeQuerySet'>
(Pdb) type(Question.objects.get_query_set())
<class 'django.db.models.query.QuerySet'>