From 60626162f76f26d32a38d18151700cb041201fb3 Mon Sep 17 00:00:00 2001 From: Daniel Hillier Date: Sat, 8 Aug 2020 15:17:36 +1000 Subject: Fixed #31866 -- Fixed locking proxy models in QuerySet.select_for_update(of=()). --- django/db/models/sql/compiler.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'django/db/models/sql') diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py index 686e75c979..fc7a7aafae 100644 --- a/django/db/models/sql/compiler.py +++ b/django/db/models/sql/compiler.py @@ -982,7 +982,8 @@ class SQLCompiler: the query. """ def _get_parent_klass_info(klass_info): - for parent_model, parent_link in klass_info['model']._meta.parents.items(): + concrete_model = klass_info['model']._meta.concrete_model + for parent_model, parent_link in concrete_model._meta.parents.items(): parent_list = parent_model._meta.get_parent_list() yield { 'model': parent_model, @@ -1007,8 +1008,9 @@ class SQLCompiler: select_fields is filled recursively, so it also contains fields from the parent models. """ + concrete_model = klass_info['model']._meta.concrete_model for select_index in klass_info['select_fields']: - if self.select[select_index][0].target.model == klass_info['model']: + if self.select[select_index][0].target.model == concrete_model: return self.select[select_index][0] def _get_field_choices(): -- cgit v1.3