From d5c19f9b327fccc1f707e10de648fe9d4cdacb9b Mon Sep 17 00:00:00 2001 From: Clifford Gama Date: Sat, 15 Mar 2025 11:13:46 +0200 Subject: 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. --- django/contrib/contenttypes/fields.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'django') diff --git a/django/contrib/contenttypes/fields.py b/django/contrib/contenttypes/fields.py index 272cb2b02c..f9d896bc13 100644 --- a/django/contrib/contenttypes/fields.py +++ b/django/contrib/contenttypes/fields.py @@ -205,14 +205,11 @@ class GenericForeignKey(FieldCacheMixin, Field): model = self.get_content_type( id=ct_id, using=obj._state.db ).model_class() - return ( - model._meta.pk.get_prep_value(getattr(obj, self.fk_field)), - model, - ) + return str(getattr(obj, self.fk_field)), model return ( ret_val, - lambda obj: (obj.pk, obj.__class__), + lambda obj: (obj._meta.pk.value_to_string(obj), obj.__class__), gfk_key, True, self.name, -- cgit v1.3