python - Cómo usar UUID en Django
django-models (3)
Estoy tratando de obtener identificaciones únicas para mis objetos Django. En Django 1.8 tienen el UUIDField. No estoy seguro de cómo usar este campo para generar ID únicas para cada objeto en mi modelo.
Esto es lo que tengo para el UUIDField
import uuid
from django.db import models
class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
class Person(models.Model):
...
unique_id = MyUUIDModel()
Puedo reproducir la identificación para el modelo UUID, pero cada vez que lo hago obtengo la misma identificación. :(. Por ejemplo:
person = Person.objects.get(some_field = some_thing)
id = person.unique_id.id
La identificación entonces me da la misma identificación cada vez. ¿Qué está mal, ¿cómo puedo solucionar esto? ¡Gracias por tu ayuda!
Debe utilizar la clase que creó como subclase cuando declare su modelo de persona de esta manera:
import uuid
from django.db import models
class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
class Person(MyUUIDModel):
...
De esta manera, Person se convierte en una subclase de MyUUIDModel y heredará su definición de campo de identificación.
No estoy seguro de por qué has creado un modelo UUID. Puede agregar el campo uuid directamente al modelo de persona.
class Person(models.Model):
unique_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
Cada persona debe tener una identificación única. Si quisieras que el uuid fuera la clave principal, harías:
class Person(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
Tu código actual no ha agregado un campo a la persona. Ha creado una instancia de MyUUIDModel
al hacer MyUUIDModel () y la ha guardado como un atributo de clase. No tiene sentido hacer eso, el MyUUIDModel
se creará cada vez que se cargue models.py. Si realmente desea utilizar el modelo MyUUID, puede usar una ForeignKey
. Luego, cada persona se vincularía a una instancia de MyUUIDModel diferente.
class Person(models.Model):
...
unique_id = models.ForeignKey(MyUUIDModel, unique=True)
Sin embargo, como dije anteriormente, el enfoque más sencillo es agregar el campo UUID directamente a la persona.
Puede agregar directamente el campo de id
como un UUIDField
en el modelo de Person
. No hay necesidad de un MyUUIDModel
por separado.
Creo que lo has confundido con el MyUUIDModel
utilizado en el UUIDField donde el id
es un UUIDField
Solo puede usar el siguiente código y usará los UUIDs
para la id
.
import uuid
from django.db import models
class Person(models.Model):
...
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)