Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#31249 closed Bug (duplicate)

select_for_update() with 'of' crashes with models from multi-level inheritance.

Reported by: Abhijeet Viswa Owned by: Abhijeet Viswa
Component: Database layer (models, ORM) Version: 2.2
Severity: Normal Keywords: select_for_update mti
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Consider the following models:

class A(models.Model):
    field1 = models.IntegerField()

class B(A):
    field2 = models.IntegerField()

class C(B):
    field_c = models.IntegerField()
queryset = C.objects.all().select_for_update(of=('b_ptr', 'b_ptr__a_ptr'))

The above queryset crashes with the following crashlog:

Traceback (most recent call last):
  File "/home/abhijeet/git-repos/django/django/core/management/base.py", line 328, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/abhijeet/git-repos/django/django/core/management/base.py", line 369, in execute
    output = self.handle(*args, **options)
  File "/home/abhijeet/django_contrib/selectforupdate/management/commands/debug.py", line 12, in handle
    print(queryset.query)
  File "/home/abhijeet/git-repos/django/django/db/models/sql/query.py", line 257, in __str__
    sql, params = self.sql_with_params()
  File "/home/abhijeet/git-repos/django/django/db/models/sql/query.py", line 265, in sql_with_params
    return self.get_compiler(DEFAULT_DB_ALIAS).as_sql()
  File "/home/abhijeet/git-repos/django/django/db/models/sql/compiler.py", line 555, in as_sql
    of=self.get_select_for_update_of_arguments(),
  File "/home/abhijeet/git-repos/django/django/db/models/sql/compiler.py", line 1036, in get_select_for_update_of_arguments
    select_index = klass_info['select_fields'][0]
IndexError: list index out of range

Change History (3)

comment:1 by Abhijeet Viswa, 5 years ago

My PR.

The PR adds a testcase which will fail since it expects #31246 to have been fixed.

comment:2 by Mariusz Felisiak, 5 years ago

Resolution: duplicate
Status: assignedclosed
Summary: Multilevel Inherited models crashes with select_for_update 'of'select_for_update() with 'of' crashes with models from multi-level inheritance.

I think we can treat this ticket as a duplicate of #31246 because both are related with using models from model inheritance in of argument of select_for_update().

in reply to:  2 comment:3 by Abhijeet Viswa, 5 years ago

Replying to felixxm:

I think we can treat this ticket as a duplicate of #31246 because both are related with using models from model inheritance in of argument of select_for_update().

Sounds good. I wasn't sure if I should include this bug in #31246. I thought it would be best to leave it as a separate ticket.

Note: See TracTickets for help on using tickets.
Back to Top