└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Cheatsheet for Django QuerySets 2 | Current Django Version: [5.2](https://docs.djangoproject.com/en/5.2/ref/models/querysets/) 3 | 4 | Mandatory impostor syndrome notice: The documentation has gotten a lot easier to navigate and this cheatsheet makes a lot less sense nowadays, but many people seem to be actively using it, so i'll keep it updated for a few more versions. 5 | 6 | ## Methods that return new [QuerySets](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#methods-that-return-new-querysets) 7 | 8 | **Can be chained:** 9 | 10 | ```python 11 | Entry.objects.filter(**kwargs).exclude(**kwargs).order_by(**kwargs) 12 | ``` 13 | 14 | * [filter](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#filter) 15 | * [exclude](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#exclude) 16 | * [annotate](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#annotate) 17 | * [alias]([text](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#alias)) 18 | * [order_by](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#order-by) 19 | * [reverse](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#reverse) 20 | * [distinct](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#distinct) 21 | * [values](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#values) 22 | * [values_list](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#values-list) 23 | * [dates](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#dates) 24 | * [datetimes](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#datetimes) 25 | * [none](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#none) 26 | * [all](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#all) 27 | * [union](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#union) 28 | * [intersection](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#intersection) 29 | * [difference](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#difference) 30 | * [select_related](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#select-related) 31 | * [prefetch_related](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#prefetch-related) 32 | * [extra](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#extra) 33 | * [defer](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#defer) 34 | * [only](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#only) 35 | * [using](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#using) 36 | * [select_for_update](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#select-for-update) 37 | * [raw](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#raw) 38 | 39 | ## Operators that return new [QuerySets](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#operators-that-return-new-querysets) 40 | 41 | * [AND (&)](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#and) 42 | * [OR (|)](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#or) 43 | * [XOR (^)](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#xor) 44 | 45 | ## Methods that do not return [QuerySets](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#methods-that-do-not-return-querysets) 46 | 47 | * [get](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#get) 48 | * [create](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#create) 49 | * [get_or_create](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#get-or-create) 50 | * [update_or_create](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#update-or-create) 51 | * [bulk_create](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#bulk-create) 52 | * [bulk_update](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#bulk-update) 53 | * [count](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#count) 54 | * [in_bulk](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#in-bulk) 55 | * [iterator](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#iterator) 56 | * [latest](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#latest) 57 | * [earliest](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#earliest) 58 | * [first](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#first) 59 | * [last](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#last) 60 | * [aggregate](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#aggregate) 61 | * [exists](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#exists) 62 | * [contains](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#contains) 63 | * [update](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#update) 64 | * [delete](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#delete) 65 | * [as_manager](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#as-manager) 66 | * [explain](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#explain) 67 | 68 | ## Field lookups [(link)](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#field-lookups) 69 | 70 | **Field lookups are how you specify the meat of an SQL WHERE clause. They’re specified as keyword arguments to the QuerySet methods *filter()*, *exclude()* and *get()*.** 71 | 72 | ```python 73 | Example: Entry.objects.get(id__exact=14) # note double underscore. 74 | ``` 75 | 76 | * [exact](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#exact) 77 | * [iexact](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#iexact) 78 | * [contains](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#contains) 79 | * [icontains](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#icontains) 80 | * [in](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#in) 81 | * [gt](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#gt) 82 | * [gte](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#gte) 83 | * [lt](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#lt) 84 | * [lte](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#lte) 85 | * [startswith](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#startswith) 86 | * [istartswith](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#istartswith) 87 | * [endswith](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#endswith) 88 | * [iendswith](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#iendswith) 89 | * [range](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#range) 90 | * [date](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#date) 91 | * [year](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#year) 92 | * [iso_year](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#iso-year) 93 | * [month](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#month) 94 | * [day](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#day) 95 | * [week](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#week) 96 | * [week_day](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#week-day) 97 | * [iso_week_day](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#iso-week-day) 98 | * [quarter](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#quarter) 99 | * [time](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#time) 100 | * [hour](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#hour) 101 | * [minute](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#minute) 102 | * [second](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#second) 103 | * [isnull](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#isnull) 104 | * [regex](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#regex) 105 | * [iregex](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#iregex) 106 | 107 | **Protip: Use [in](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#in) to avoid chaining [filter()](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#filter) and [exclude()](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#exclude)** 108 | 109 | ```python 110 | Entry.objects.filter(status__in=['Hung over', 'Sober', 'Drunk']) 111 | ``` 112 | 113 | ## Aggregation functions ([link](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#aggregation-functions)) 114 | 115 | * [expression](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#expression) 116 | * [output_field](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#output-field) 117 | * [filter](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#aggregate-filter) 118 | * [default](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#default) 119 | * [\*\*extra](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#id7) 120 | * [Avg](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#avg) 121 | * [Count](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#id8) 122 | * [Max](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#max) 123 | * [Min](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#min) 124 | * [StdDev](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#stddev) 125 | * [Sum](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#sum) 126 | * [Variance](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#variance) 127 | 128 | ## Query-related tools ([link](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#query-related-tools)) 129 | 130 | * [Q() objects](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#q-objects) 131 | * [Prefetch() objects](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#prefetch-objects) 132 | * [prefetch_related_objects()](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#prefetch-related-objects) 133 | * [FilteredRelation() objects](https://docs.djangoproject.com/en/5.2/ref/models/querysets/#filteredrelation-objects) 134 | 135 | - - - 136 | 137 | Creative Commons License
Django-QuerySet-Cheatsheet by @chrisdl and @briandant is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
138 | 139 | The [contributors](https://github.com/chrisdl/Django-QuerySet-Cheatsheet/graphs/contributors) are as gods among ants and shall forever be remembered as such. 140 | 141 | The Django web framework referenced in the Django-QuerySet-Cheatsheet is ​© 2005-2025 Django Software Foundation. 142 | Django is a [registered trademark](https://www.djangoproject.com/trademarks/) of the [Django Software Foundation](http://djangoproject.com/foundation/). 143 | --------------------------------------------------------------------------------