python django django-models uuid

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)