﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
36120	"Calling .update() on the virtual ""pk"" field for composite primary keys raises AttributeError"	Jacob Walls	Jacob Walls	"Do we want to support `.update(pk=...` for composite primary keys?

If not, let's raise a friendly error.

Rough test for demo purposes:
{{{#!diff
diff --git a/tests/composite_pk/test_update.py b/tests/composite_pk/test_update.py
index ec770230fc..3bd65d918a 100644
--- a/tests/composite_pk/test_update.py
+++ b/tests/composite_pk/test_update.py
@@ -175,3 +175,7 @@ class CompositePKUpdateTests(TestCase):
 
         with self.assertRaisesMessage(ValueError, msg):
             Comment.objects.update(user=User())
+
+    def test_update_lhs_pk(self):
+        qs = Comment.objects.filter(user__email=self.user_1.email)
+        qs.update(pk=(1, 100))  # supported?
}}}

----
{{{#!diff
======================================================================
ERROR: test_update_lhs_pk (composite_pk.test_update.CompositePKUpdateTests.test_update_lhs_pk)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/Users/source/django/tests/composite_pk/test_update.py"", line 182, in test_update_lhs_pk
    qs.update(pk=(1, 100))  # decide whether to support this or not
    ~~~~~~~~~^^^^^^^^^^^^^
  File ""/Users/source/django/django/db/models/query.py"", line 1254, in update
    rows = query.get_compiler(self.db).execute_sql(ROW_COUNT)
  File ""/Users/source/django/django/db/models/sql/compiler.py"", line 2068, in execute_sql
    row_count = super().execute_sql(result_type)
  File ""/Users/source/django/django/db/models/sql/compiler.py"", line 1610, in execute_sql
    sql, params = self.as_sql()
                  ~~~~~~~~~~~^^
  File ""/Users/source/django/django/db/models/sql/compiler.py"", line 2044, in as_sql
    values.append(""%s = %s"" % (qn(name), placeholder))
                               ~~^^^^^^
  File ""/Users/source/django/django/db/models/sql/compiler.py"", line 568, in quote_name_unless_alias
    r = self.connection.ops.quote_name(name)
  File ""/Users/source/django/django/db/backends/sqlite3/operations.py"", line 190, in quote_name
    if name.startswith('""') and name.endswith('""'):
       ^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'startswith'

----------------------------------------------------------------------
}}}"	Bug	closed	Database layer (models, ORM)	5.2	Release blocker	fixed			Ready for checkin	1	0	0	0	0	0
