1
0
mirror of https://github.com/django/django.git synced 2025-03-12 10:22:37 +00:00

Fixed #36074 -- Excluded composite primary key fields on save() updates.

This commit is contained in:
Simon Charette 2025-01-09 00:29:58 -05:00 committed by Sarah Boyce
parent fc28550fe4
commit af6336f2c8
2 changed files with 8 additions and 2 deletions

View File

@ -1091,10 +1091,11 @@ class Model(AltersData, metaclass=ModelBase):
for a single table.
"""
meta = cls._meta
pk_fields = meta.pk_fields
non_pks_non_generated = [
f
for f in meta.local_concrete_fields
if not f.primary_key and not f.generated
if f not in pk_fields and not f.generated
]
if update_fields:

View File

@ -1,3 +1,4 @@
from django.db import connection
from django.test import TestCase
from .models import Comment, Tenant, Token, User
@ -45,7 +46,11 @@ class CompositePKUpdateTests(TestCase):
email = "user9314@example.com"
user = User.objects.get(pk=self.user_1.pk)
user.email = email
user.save()
with self.assertNumQueries(1) as ctx:
user.save()
sql = ctx[0]["sql"]
self.assertEqual(sql.count(connection.ops.quote_name("tenant_id")), 1)
self.assertEqual(sql.count(connection.ops.quote_name("id")), 1)
user.refresh_from_db()
self.assertEqual(user.email, email)
user = User.objects.get(pk=self.user_1.pk)