How to use UUID
I'm not sure why you've created a UUID model. You can add the uuid field directly to the Person model.
class Person(models.Model): unique_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
Each person should then have a unique id. If you wanted the uuid to be the primary key, you would do:
class Person(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
Your current code hasn't added a field to the person. It has created a MyUUIDModel
instance when you do MyUUIDModel(), and saved it as a class attribute. It doesn't make sense to do that, the MyUUIDModel
will be created each time the models.py loads. If you really wanted to use the MyUUIDModel, you could use a ForeignKey
. Then each person would link to a different MyUUIDModel instance.
class Person(models.Model): ... unique_id = models.ForeignKey(MyUUIDModel, unique=True)
However, as I said earlier, the easiest approach is to add the UUID field directly to the person.
You can directly add the id
field as a UUIDField
in the Person
model. There is no need for a separate MyUUIDModel
.
I think you have confused it with the MyUUIDModel
used in the UUIDField example where the id
is a UUIDField
. You can just use the below code and it will use UUIDs
for id
.
import uuidfrom django.db import modelsclass Person(models.Model): ... id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
You need to use the class you created as a subclass when declaring your Person model like this:
import uuidfrom django.db import modelsclass MyUUIDModel(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)class Person(MyUUIDModel): ...
This way Person becomes a subclass of MyUUIDModel and will inherit its id field definition.