调用filter()后select_related或select_prefetched?

时间:2013-06-13 09:13:44

标签: django django-queryset

我看到的所有示例首先选择select_related(),然后调用filter(),如下所示:

MyModel.objects.select_related().filter()

我可以吗

qs = MyModel.objects.filter(my_field=my_var)
qs = qs.select_related().filter(my_foreign_key_field=another_var)

2 个答案:

答案 0 :(得分:1)

是的,你可以 如你所见:

type(MyModel.objects.filter(pk=1))
<class 'django.db.models.query.QuerySet'>

type(MyModel.objects.filter(pk=1).select_related())
<class 'django.db.models.query.QuerySet'>

type(MyModel.objects.filter(pk=1).select_related().filter(name='test'))
<class 'django.db.models.query.QuerySet'>

所有这些都是QuerySets

答案 1 :(得分:0)

我刚在shell中测试过它:

>>> from myApp.models import Unit_type, Transaction
>>> u = Unit_type.objects.get(pk=1)
>>> t = Transaction.objects.filter(unit_type=u)
>>> t = t.select_related().filter(transaction_end_status='R')

它没有给我一个错误,并给了我一个长度为1的查询集。