@@ -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
6936class UUIDModelMixin (models .Model ):
0 commit comments