diff options
| author | Cole Maclean <hi@cole.io> | 2015-06-04 14:42:26 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-06-06 19:46:05 -0400 |
| commit | 20ff296cb15a53b8b9517a834688e57749b43e21 (patch) | |
| tree | 20a9eccc43e45cdce75fe3cf280a95cc43a2300d | |
| parent | eaf4d8c0d85056c3481986fe092d5a8786bc4f26 (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__.py | 18 | ||||
| -rw-r--r-- | tests/model_fields/test_uuid.py | 7 |
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', |
