mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #34819 -- Made GenericForeignKey prefetching use matching pk representations.
Ensured that rel_obj_attr and instance_attr return matching (pk, cls) tuples in GenericForeignKey.get_prefetch_queryset(), preventing mismatches when prefetching related objects where pk and get_prep_value() differ. Using value_to_string() also makes this code compatible with composite primary keys.
This commit is contained in:
committed by
Sarah Boyce
parent
7d9aab8da0
commit
d5c19f9b32
@@ -16,6 +16,7 @@ from django.test.utils import CaptureQueriesContext
|
||||
|
||||
from .models import (
|
||||
Article,
|
||||
ArticleCustomUUID,
|
||||
Author,
|
||||
Author2,
|
||||
AuthorAddress,
|
||||
@@ -1179,6 +1180,14 @@ class GenericRelationTests(TestCase):
|
||||
qs = Comment.objects.prefetch_related("content_object_uuid")
|
||||
self.assertEqual([c.content_object_uuid for c in qs], [article])
|
||||
|
||||
def test_prefetch_GFK_uses_prepped_primary_key(self):
|
||||
article = ArticleCustomUUID.objects.create(name="Blanche")
|
||||
Comment.objects.create(comment="Enchantment", content_object_uuid=article)
|
||||
obj = Comment.objects.prefetch_related("content_object_uuid").get(
|
||||
comment="Enchantment"
|
||||
)
|
||||
self.assertEqual(obj.content_object_uuid, article)
|
||||
|
||||
def test_prefetch_GFK_fk_pk(self):
|
||||
book = Book.objects.create(title="Poems")
|
||||
book_with_year = BookWithYear.objects.create(book=book, published_year=2019)
|
||||
|
||||
Reference in New Issue
Block a user