看起来我已经通过升级到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()
行128
中的django/db/models/manager.py
。在Django中,1.6同样的方法指向get_queryset
,因为,我猜,get_query_set
已被弃用。顺便说一下,这是同一文件的行133
。
确实,在Django 1.5中,OSQA被破坏了
*** AttributeError: AttributeError("'QuerySet' object has no attribute 'filter_state'",)
,因为在forum/views/readers.py
,行207
,它确实
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'>