mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Removed join() promote kwarg
The join promote=True was over-aggressive in select_related handling. After that was removed, the only other user was query.combine(). That use case is very easy to handle locally, so there is no more need for the join(promote=True) flag. Refs #19849.
This commit is contained in:
@@ -139,3 +139,26 @@ class SelectRelatedRegressTests(TestCase):
|
||||
self.assertEqual(troy.name, 'Troy Buswell')
|
||||
self.assertEqual(troy.value, 42)
|
||||
self.assertEqual(troy.state.name, 'Western Australia')
|
||||
|
||||
def test_null_join_promotion(self):
|
||||
australia = Country.objects.create(name='Australia')
|
||||
active = ClientStatus.objects.create(name='active')
|
||||
|
||||
wa = State.objects.create(name="Western Australia", country=australia)
|
||||
bob = Client.objects.create(name='Bob', status=active)
|
||||
jack = Client.objects.create(name='Jack', status=active, state=wa)
|
||||
qs = Client.objects.filter(state=wa).select_related('state')
|
||||
with self.assertNumQueries(1):
|
||||
self.assertEqual(list(qs), [jack])
|
||||
self.assertEqual(qs[0].state, wa)
|
||||
# The select_related join wasn't promoted as there was already an
|
||||
# existing (even if trimmed) inner join to state.
|
||||
self.assertFalse('LEFT OUTER' in str(qs.query))
|
||||
qs = Client.objects.select_related('state').order_by('name')
|
||||
with self.assertNumQueries(1):
|
||||
self.assertEqual(list(qs), [bob, jack])
|
||||
self.assertIs(qs[0].state, None)
|
||||
self.assertEqual(qs[1].state, wa)
|
||||
# The select_related join was promoted as there is already an
|
||||
# existing join.
|
||||
self.assertTrue('LEFT OUTER' in str(qs.query))
|
||||
|
||||
Reference in New Issue
Block a user