Skip to content

Commit 7d9efff

Browse files
committed
Just modify the Django UUIDField for our 32 digit hex representation.
1 parent 7c497ec commit 7d9efff

File tree

1 file changed

+8
-40
lines changed

1 file changed

+8
-40
lines changed

morango/models/fields/uuids.py

Lines changed: 8 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,67 +2,35 @@
22
import uuid
33

44
from django.db import models
5+
56
from morango.utils import _assert
67

78

89
def sha2_uuid(*args):
910
return hashlib.sha256("::".join(args).encode("utf-8")).hexdigest()[:32]
1011

1112

12-
class UUIDField(models.CharField):
13+
class UUIDField(models.UUIDField):
1314
"""
1415
Adaptation of Django's UUIDField, but with 32-char hex representation as Python representation rather than a UUID instance.
1516
"""
1617

17-
def __init__(self, *args, **kwargs):
18-
kwargs["max_length"] = 32
19-
super(UUIDField, self).__init__(*args, **kwargs)
20-
21-
def prepare_value(self, value):
22-
if isinstance(value, uuid.UUID):
23-
return value.hex
24-
return value
25-
26-
def deconstruct(self):
27-
name, path, args, kwargs = super(UUIDField, self).deconstruct()
28-
del kwargs["max_length"]
29-
return name, path, args, kwargs
30-
31-
def get_internal_type(self):
32-
return "UUIDField"
33-
3418
def get_db_prep_value(self, value, connection, prepared=False):
3519
if value is None:
3620
return None
3721
if not isinstance(value, uuid.UUID):
38-
try:
39-
value = uuid.UUID(value)
40-
except AttributeError:
41-
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
4226
return value.hex
4327

4428
def from_db_value(self, value, expression, connection, context):
4529
return self.to_python(value)
4630

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

6735

6836
class UUIDModelMixin(models.Model):

0 commit comments

Comments
 (0)