It looks like I have solved the problem by upgrading to Django 1.6. Just curious, what was going on.
I am trying to integrate OSQA alongside an existing Django app, and I am encountering some very subtle issues. Just look at that --- this is one PDB session, no multiple inheritance:
(Pdb) p type(self.get_query_set())
<class 'django.db.models.query.QuerySet'>
(Pdb) p type(self.get_queryset())
<class 'forum.models.node.NodeQuerySet'>
In Django 1.5, the default django.db.models.Manager
has method all
(as in MyModel.objects.all()
) pointing to get_query_set()
in line 128
of django/db/models/manager.py
. In Django, 1.6 this same method is pointing to get_queryset
, since, I guess, get_query_set
became deprecated. This is line 133
of the same file, by the way.
Indeed, OSQA is broken in Django 1.5 It fails with
*** AttributeError: AttributeError("'QuerySet' object has no attribute 'filter_state'",)
, because in forum/views/readers.py
, line 207
, it does
questions = initial.filter_state(deleted=False)
, and there is no such function. In this case, it is passed Question.objects.all()
as initial
, but somehow it ends up being django.db.models.query.QuerySet
instead of
forum.models.node.NodeQuerySet
, which does have the required method.
(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'>