我看到的所有示例都有 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)
我看到的所有示例都有 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)
是的,您可以如您所见:
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'>
它们都是查询集
我刚刚在 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 的查询集。