一次获取而不要多次获取

DON’T DO

  1. >>> print([e.headline for e in Entry.objects.all()])
  2. >>> print([e.pub_date for e in Entry.objects.all()])

DO

  1. >>> queryset = Entry.objects.all()
  2. >>> print([p.headline for p in queryset]) # 提交查询
  3. >>> print([p.pub_date for p in queryset]) # 重用查询缓存

遍历过 QuerySet 就会建立缓存

获取之后的遍历方法

以下4种都可以遍历:

  1. # 方法1
  2. >>> [entry for entry in queryset]
  3. # 方法2
  4. >>> bool(queryset)
  5. # 方法3
  6. >>> entry in queryset
  7. # 方法4
  8. >>> list(queryset)