Fixed #33260 -- Fixed crash when chaining QuerySet.exists() after select_for_update(of=()).

This commit is contained in:
Hannes Ljungberg 2021-11-03 13:28:04 +01:00 committed by Mariusz Felisiak
parent 447b6c866f
commit 25157033e9
2 changed files with 10 additions and 0 deletions

View File

@ -1077,6 +1077,8 @@ class SQLCompiler:
(path, klass_info)
for klass_info in klass_info.get('related_klass_infos', [])
)
if not self.klass_info:
return []
result = []
invalid_names = []
for name in self.query.select_for_update_of:

View File

@ -244,6 +244,14 @@ class SelectForUpdateTests(TransactionTestCase):
values = list(Person.objects.select_related('born').select_for_update(of=('self',)).values('born__name'))
self.assertEqual(values, [{'born__name': self.city1.name}])
@skipUnlessDBFeature(
'has_select_for_update_of', 'supports_select_for_update_with_limit',
)
def test_for_update_of_with_exists(self):
with transaction.atomic():
qs = Person.objects.select_for_update(of=('self', 'born'))
self.assertIs(qs.exists(), True)
@skipUnlessDBFeature('has_select_for_update_nowait')
def test_nowait_raises_error_on_block(self):
"""