└── 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 | 
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 |
--------------------------------------------------------------------------------