get_queryset vs. get_query_set,Django 1.5 vs. 1.6

时间:2014-06-15 22:12:49

标签: django django-queryset django-1.5 django-1.6 osqa

看起来我已经通过升级到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'>

0 个答案:

没有答案