Pour un certain nombre de raisons ^, j'aimerais utiliser un UUID comme clé primaire dans certains de mes modèles Django. Si je le fais, est-ce que je pourrai toujours utiliser des applications extérieures comme "contrib.comments", "django -oting" ou "django-tagging" qui utilisent des relations génériques via ContentType?
En utilisant "django-vote" comme exemple, le modèle Vote ressemble à ceci:
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)
Cette application semble supposer que la clé primaire du modèle soumis au vote est un entier.
L'application de commentaires intégrée semble être capable de gérer les PK non entiers, cependant:
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")
Ce problème «supposé PK entier» est-il une situation courante pour les applications tierces qui rendraient l'utilisation des UUID pénibles? Ou, peut-être, ai-je mal interprété cette situation?
Existe-t-il un moyen d'utiliser les UUID comme clés primaires dans Django sans causer trop de problèmes?
^ Certaines des raisons: masquer le nombre d'objets, empêcher l'exploration d'url "id crawling", utiliser plusieurs serveurs pour créer des objets non conflictuels, ...
default
.