Skip to content

Commit 0b138f1

Browse files
committed
Just modify the Django UUIDField for our 32 digit hex representation.
1 parent 5fae247 commit 0b138f1

1 file changed

Lines changed: 7 additions & 40 deletions

File tree

morango/models/fields/uuids.py

Lines changed: 7 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -10,60 +10,27 @@ def sha2_uuid(*args):
1010
return hashlib.sha256("::".join(args).encode("utf-8")).hexdigest()[:32]
1111

1212

13-
class UUIDField(models.CharField):
13+
class UUIDField(models.UUIDField):
1414
"""
1515
Adaptation of Django's UUIDField, but with 32-char hex representation as Python representation rather than a UUID instance.
1616
"""
1717

18-
def __init__(self, *args, **kwargs):
19-
kwargs["max_length"] = 32
20-
super(UUIDField, self).__init__(*args, **kwargs)
21-
22-
def prepare_value(self, value):
23-
if isinstance(value, uuid.UUID):
24-
return value.hex
25-
return value
26-
27-
def deconstruct(self):
28-
name, path, args, kwargs = super(UUIDField, self).deconstruct()
29-
del kwargs["max_length"]
30-
return name, path, args, kwargs
31-
32-
def get_internal_type(self):
33-
return "UUIDField"
34-
3518
def get_db_prep_value(self, value, connection, prepared=False):
3619
if value is None:
3720
return None
3821
if not isinstance(value, uuid.UUID):
39-
try:
40-
value = uuid.UUID(value)
41-
except AttributeError:
42-
raise TypeError(self.error_messages["invalid"] % {"value": value})
22+
value = super(UUIDField, self).to_python(value)
23+
24+
if connection.features.has_native_uuid_field:
25+
return value
4326
return value.hex
4427

4528
def from_db_value(self, value, expression, connection):
4629
return self.to_python(value)
4730

4831
def to_python(self, value):
49-
if isinstance(value, uuid.UUID):
50-
return value.hex
51-
return value
52-
53-
def get_default(self):
54-
"""
55-
Returns the default value for this field.
56-
"""
57-
if self.has_default():
58-
if callable(self.default):
59-
default = self.default()
60-
if isinstance(default, uuid.UUID):
61-
return default.hex
62-
return default
63-
if isinstance(self.default, uuid.UUID):
64-
return self.default.hex
65-
return self.default
66-
return None
32+
value = super(UUIDField, self).to_python(value)
33+
return value.hex if isinstance(value, uuid.UUID) else value
6734

6835

6936
class UUIDModelMixin(models.Model):

0 commit comments

Comments
 (0)