get_queryset vs. get_query_set, Django 1.5 vs. 1.6

1.2k Views Asked by At

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'>

0

There are 0 best solutions below