Commit 20ff296c authored by Cole Maclean's avatar Cole Maclean Committed by Tim Graham
Browse files

Fixed #24859 -- Made QuerySet.get() with UUIDField raise TypeError on bad value.

For consistency with AutoField.
parent eaf4d8c0
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -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):
        if value is None:
            return None
        if not isinstance(value, uuid.UUID):
            try:
                value = uuid.UUID(value)
        if isinstance(value, uuid.UUID):
            except AttributeError:
                raise TypeError(self.error_messages['invalid'] % {'value': value})

        if connection.features.has_native_uuid_field:
            return value
        return value.hex
        return value

    def to_python(self, value):
        if value and not isinstance(value, uuid.UUID):
+7 −0
Original line number Diff line number Diff line
@@ -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',