30 lines
995 B
Python
30 lines
995 B
Python
import uuid
|
|
|
|
from django.db import models
|
|
|
|
class UUIDField(models.Field):
|
|
__metaclass__ = models.SubfieldBase
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
kwargs['max_length'] = 32
|
|
kwargs['editable'] = False
|
|
kwargs['blank'] = False
|
|
kwargs['unique'] = True
|
|
super(UUIDField, self).__init__(*args, **kwargs)
|
|
|
|
def pre_save(self, model_instance, add):
|
|
value = getattr(model_instance, self.attname, None)
|
|
if not value and add:
|
|
setattr(model_instance, self.attname, uuid.uuid4().hex)
|
|
return super(UUIDField, self).pre_save(model_instance, add)
|
|
|
|
def db_type(self, connection=None):
|
|
return 'char(%s)' % (self.max_length,)
|
|
|
|
def south_field_triple(self):
|
|
"Returns a suitable description of this field for South."
|
|
from south.modelsinspector import introspector
|
|
field_class = "%s.UUIDField" % __name__
|
|
args, kwargs = introspector(self)
|
|
return (field_class, args, kwargs)
|