diff options
| -rw-r--r-- | django/db/models/fields/__init__.py | 2 | ||||
| -rw-r--r-- | tests/prefetch_related/models.py | 4 |
2 files changed, 5 insertions, 1 deletions
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) |
