Performance: Ordering and slicing querysets
This affects how quickly the database returns data and how much work the server and browser do to display results.
Jump into concepts and practice - no test required
limited_items = MyModel.objects.order_by('created_at')[:10]
all_items = MyModel.objects.all() sorted_items = sorted(all_items, key=lambda x: x.created_at) limited_items = sorted_items[:10]
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Ordering and slicing in Python after fetching all data | N/A | N/A | High due to delayed data | [X] Bad |
| Ordering and slicing in database query | N/A | N/A | Low due to fast data delivery | [OK] Good |
order_by('name') do?order_by() methodorder_by() method sorts the queryset results based on the given field(s).order_by('name')order_by('-created_at') for descending order[:5] to get first 5 resultsqs = Model.objects.order_by('age')[2:5], what will list(qs) return if the ages in the database are [20, 25, 30, 35, 40, 45]?qs = Model.objects[:5].order_by('name')Model.objects[:5] evaluates it and returns a list, not a queryset.order_by on a list causes errororder_by method, so this code raises an error.order_by('-published_date') to get newest first.[2:7] gets items at indexes 2,3,4,5,6 (5 items total).