| 179 | ) |
| 180 | |
| 181 | def test_order_by_nulls_first(self): |
| 182 | Article.objects.filter(headline="Article 3").update(author=self.author_1) |
| 183 | Article.objects.filter(headline="Article 4").update(author=self.author_2) |
| 184 | # asc and desc are chainable with nulls_first. |
| 185 | self.assertQuerySetEqualReversible( |
| 186 | Article.objects.order_by(F("author").asc(nulls_first=True), "headline"), |
| 187 | [self.a1, self.a2, self.a3, self.a4], |
| 188 | ) |
| 189 | self.assertQuerySetEqualReversible( |
| 190 | Article.objects.order_by(F("author").desc(nulls_first=True), "headline"), |
| 191 | [self.a1, self.a2, self.a4, self.a3], |
| 192 | ) |
| 193 | self.assertQuerySetEqualReversible( |
| 194 | Article.objects.order_by( |
| 195 | Upper("author__name").asc(nulls_first=True), "headline" |
| 196 | ), |
| 197 | [self.a1, self.a2, self.a3, self.a4], |
| 198 | ) |
| 199 | self.assertQuerySetEqualReversible( |
| 200 | Article.objects.order_by( |
| 201 | Upper("author__name").desc(nulls_first=True), "headline" |
| 202 | ), |
| 203 | [self.a1, self.a2, self.a4, self.a3], |
| 204 | ) |
| 205 | self.assertQuerySetEqualReversible( |
| 206 | Article.objects.annotate(upper_name=Upper("author__name")).order_by( |
| 207 | F("upper_name").desc(nulls_first=True), "headline" |
| 208 | ), |
| 209 | [self.a1, self.a2, self.a4, self.a3], |
| 210 | ) |
| 211 | |
| 212 | def test_orders_nulls_first_on_filtered_subquery(self): |
| 213 | Article.objects.filter(headline="Article 1").update(author=self.author_1) |