(self)
| 224 | ) |
| 225 | |
| 226 | def test_ticket2306(self): |
| 227 | # Checking that no join types are "left outer" joins. |
| 228 | query = Item.objects.filter(tags=self.t2).query |
| 229 | self.assertNotIn(LOUTER, [x.join_type for x in query.alias_map.values()]) |
| 230 | |
| 231 | self.assertSequenceEqual( |
| 232 | Item.objects.filter(Q(tags=self.t1)).order_by("name"), |
| 233 | [self.i1, self.i2], |
| 234 | ) |
| 235 | self.assertSequenceEqual( |
| 236 | Item.objects.filter(Q(tags=self.t1)).filter(Q(tags=self.t2)), |
| 237 | [self.i1], |
| 238 | ) |
| 239 | self.assertSequenceEqual( |
| 240 | Item.objects.filter(Q(tags=self.t1)).filter( |
| 241 | Q(creator__name="fred") | Q(tags=self.t2) |
| 242 | ), |
| 243 | [self.i1], |
| 244 | ) |
| 245 | |
| 246 | # Each filter call is processed "at once" against a single table, so |
| 247 | # this is different from the previous example as it tries to find tags |
| 248 | # that are two things at once (rather than two tags). |
| 249 | self.assertSequenceEqual( |
| 250 | Item.objects.filter(Q(tags=self.t1) & Q(tags=self.t2)), [] |
| 251 | ) |
| 252 | self.assertSequenceEqual( |
| 253 | Item.objects.filter( |
| 254 | Q(tags=self.t1), Q(creator__name="fred") | Q(tags=self.t2) |
| 255 | ), |
| 256 | [], |
| 257 | ) |
| 258 | |
| 259 | qs = Author.objects.filter(ranking__rank=2, ranking__id=self.rank1.id) |
| 260 | self.assertSequenceEqual(list(qs), [self.a2]) |
| 261 | self.assertEqual(2, qs.query.count_active_tables(), 2) |
| 262 | qs = Author.objects.filter(ranking__rank=2).filter(ranking__id=self.rank1.id) |
| 263 | self.assertEqual(qs.query.count_active_tables(), 3) |
| 264 | |
| 265 | def test_ticket4464(self): |
| 266 | self.assertSequenceEqual( |
nothing calls this directly
no test coverage detected