From 2e33abe57c37dce6ce5eff9e6cbaf47cdddcf1e3 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Fri, 13 Mar 2026 17:06:34 -0400 Subject: Fixed #36987 -- Observed prepared argument in UUIDField.get_db_prep_value(). This avoids two isinstance() calls per UUID value. --- django/db/models/fields/__init__.py | 2 +- tests/prefetch_related/models.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index e0ad9f9a8c..e248b70ba3 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -2821,7 +2821,7 @@ class UUIDField(Field): def get_db_prep_value(self, value, connection, prepared=False): if value is None: return None - if not isinstance(value, uuid.UUID): + if not prepared and not isinstance(value, uuid.UUID): value = self.to_python(value) if connection.features.has_native_uuid_field: diff --git a/tests/prefetch_related/models.py b/tests/prefetch_related/models.py index de2d88395d..236ee57b2c 100644 --- a/tests/prefetch_related/models.py +++ b/tests/prefetch_related/models.py @@ -225,6 +225,10 @@ class ArticleCustomUUID(models.Model): def get_prep_value(self, value): return str(value) + def get_db_prep_value(self, value, connection, prepared=False): + # Use prepared=False to ensure str -> UUID conversion is performed. + return super().get_db_prep_value(value, connection, prepared=False) + id = CustomUUIDField(primary_key=True, default=uuid.uuid4) name = models.CharField(max_length=30) -- cgit v1.3