Por varias razones ^, me gustaría usar un UUID como clave principal en algunos de mis modelos de Django. Si lo hago, ¿podré seguir usando aplicaciones externas como "contrib.comments", "django-vote" o "django-tagging" que usan relaciones genéricas a través de ContentType?
Usando "django-vote" como ejemplo, el modelo Vote se ve así:
class Vote(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
vote = models.SmallIntegerField(choices=SCORES)
Esta aplicación parece asumir que la clave principal del modelo que se vota es un número entero.
Sin embargo, la aplicación de comentarios incorporada parece ser capaz de manejar PK que no son enteros:
class BaseCommentAbstractModel(models.Model):
content_type = models.ForeignKey(ContentType,
verbose_name=_('content type'),
related_name="content_type_set_for_%(class)s")
object_pk = models.TextField(_('object ID'))
content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")
¿Es este problema de "PK entero asumido" una situación común para aplicaciones de terceros que haría que el uso de UUID sea un problema? O, posiblemente, ¿estoy malinterpretando esta situación?
¿Hay alguna forma de usar UUID como claves primarias en Django sin causar demasiados problemas?
^ Algunas de las razones: ocultar recuentos de objetos, evitar el "rastreo de id" de la URL, utilizar varios servidores para crear objetos no conflictivos, ...
default
.