summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCole Maclean <hi@cole.io>2015-06-04 14:42:26 +0100
committerTim Graham <timograham@gmail.com>2015-06-06 19:46:05 -0400
commit20ff296cb15a53b8b9517a834688e57749b43e21 (patch)
tree20a9eccc43e45cdce75fe3cf280a95cc43a2300d
parenteaf4d8c0d85056c3481986fe092d5a8786bc4f26 (diff)
Fixed #24859 -- Made QuerySet.get() with UUIDField raise TypeError on bad value.
For consistency with AutoField.
-rw-r--r--django/db/models/fields/__init__.py18
-rw-r--r--tests/model_fields/test_uuid.py7
2 files changed, 18 insertions, 7 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index b87af73994..568c66f4ac 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -2380,13 +2380,17 @@ class UUIDField(Field):
return "UUIDField"
def get_db_prep_value(self, value, connection, prepared=False):
- if isinstance(value, six.string_types):
- value = uuid.UUID(value)
- if isinstance(value, uuid.UUID):
- if connection.features.has_native_uuid_field:
- return value
- return value.hex
- return value
+ if value is None:
+ return None
+ if not isinstance(value, uuid.UUID):
+ try:
+ value = uuid.UUID(value)
+ except AttributeError:
+ raise TypeError(self.error_messages['invalid'] % {'value': value})
+
+ if connection.features.has_native_uuid_field:
+ return value
+ return value.hex
def to_python(self, value):
if value and not isinstance(value, uuid.UUID):
diff --git a/tests/model_fields/test_uuid.py b/tests/model_fields/test_uuid.py
index e72a6bce56..bef1d54a74 100644
--- a/tests/model_fields/test_uuid.py
+++ b/tests/model_fields/test_uuid.py
@@ -37,6 +37,13 @@ class TestSaveLoad(TestCase):
loaded = NullableUUIDModel.objects.get()
self.assertEqual(loaded.field, None)
+ def test_pk_validated(self):
+ with self.assertRaisesMessage(TypeError, 'is not a valid UUID'):
+ PrimaryKeyUUIDModel.objects.get(pk={})
+
+ with self.assertRaisesMessage(TypeError, 'is not a valid UUID'):
+ PrimaryKeyUUIDModel.objects.get(pk=[])
+
def test_wrong_value(self):
self.assertRaisesMessage(
ValueError, 'badly formed hexadecimal UUID string',