1
0
mirror of https://github.com/django/django.git synced 2025-11-07 07:15:35 +00:00

Fixed #36326 -- Added CompositePrimaryKey support in QuerySet.raw().

Signed-off-by: SaJH <wogur981208@gmail.com>
This commit is contained in:
SaJH
2025-04-15 03:06:49 +09:00
committed by Sarah Boyce
parent d755a98b84
commit 1831f7733d
3 changed files with 21 additions and 2 deletions

View File

@@ -11,7 +11,7 @@ except ImportError:
from django import forms
from django.core import serializers
from django.core.exceptions import FieldError
from django.core.exceptions import FieldDoesNotExist, FieldError
from django.db import IntegrityError, connection
from django.db.models import CompositePrimaryKey
from django.forms import modelform_factory
@@ -158,6 +158,20 @@ class CompositePKTests(TestCase):
users = User.objects.values_list("pk").order_by("pk")
self.assertNotIn('AS "pk"', str(users.query))
def test_raw(self):
users = User.objects.raw("SELECT * FROM composite_pk_user")
self.assertEqual(len(users), 1)
user = users[0]
self.assertEqual(user.tenant_id, self.user.tenant_id)
self.assertEqual(user.id, self.user.id)
self.assertEqual(user.email, self.user.email)
def test_raw_missing_PK_fields(self):
query = "SELECT tenant_id, email FROM composite_pk_user"
msg = "Raw query must include the primary key"
with self.assertRaisesMessage(FieldDoesNotExist, msg):
list(User.objects.raw(query))
def test_only(self):
users = User.objects.only("pk")
self.assertSequenceEqual(users, (self.user,))