Por vários motivos ^, gostaria de usar um UUID como chave primária em alguns dos meus modelos Django. Se eu fizer isso, ainda poderei usar aplicativos externos como "contrib.comments", "django-votes" ou "django-tagging", que usam relações genéricas via ContentType?
Usando "django-vote" como exemplo, o modelo Vote se parece com isto:
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)
Este aplicativo parece estar assumindo que a chave primária para o modelo que está sendo votado é um número inteiro.
O aplicativo de comentários integrado parece ser capaz de lidar com PKs não inteiros, embora:
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")
É este problema "assumido por PK inteira" uma situação comum para aplicativos de terceiros que tornaria o uso de UUIDs uma dor? Ou, possivelmente, estou interpretando mal esta situação?
Existe uma maneira de usar UUIDs como chaves primárias no Django sem causar muitos problemas?
^ Algumas das razões: ocultar contagens de objetos, evitar "rastreamento de id" de url, usar vários servidores para criar objetos não conflitantes, ...
default
.