Opened 10 months ago
Last modified 9 months ago
#36120 closed Bug
Calling .update() on the virtual "pk" field for composite primary keys raises AttributeError — at Version 2
| Reported by: | Jacob Walls | Owned by: | |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 5.2 | 
| Severity: | Release blocker | Keywords: | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description (last modified by )
Do we want to support .update(pk=... for composite primary keys?
If not, let's raise a friendly error.
Rough test for demo purposes:
- 
      
tests/composite_pk/test_update.py
diff --git a/tests/composite_pk/test_update.py b/tests/composite_pk/test_update.py index ec770230fc..3bd65d918a 100644
a b class CompositePKUpdateTests(TestCase): 175 175 176 176 with self.assertRaisesMessage(ValueError, msg): 177 177 Comment.objects.update(user=User()) 178 179 def test_update_lhs_pk(self): 180 qs = Comment.objects.filter(user__email=self.user_1.email) 181 qs.update(pk=(1, 100)) # supported?  
====================================================================== 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' ----------------------------------------------------------------------
Change History (2)
comment:1 by , 10 months ago
| Description: | modified (diff) | 
|---|
comment:2 by , 10 months ago
| Description: | modified (diff) | 
|---|
  Note:
 See   TracTickets
 for help on using tickets.