З ряду причин ^, я хотів би використовувати UUID як первинний ключ у деяких моїх моделях Django. Якщо я це зроблю, чи зможу я все ще використовувати зовнішні програми, такі як "contrib.comments", "django-vote" або "django-tagging", які використовують загальні відносини через ContentType?
На прикладі "django-голосування" модель Vote виглядає так:
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)
Схоже, цей додаток припускає, що основним ключем для моделі, за якою голосують, є ціле число.
Здається, вбудований додаток для коментарів здатний обробляти нецілі ПК, однак:
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")
Чи є ця проблема "передбачуваним цілим числом PK" типовою ситуацією для сторонніх додатків, яка заважає використання UUID? Або, можливо, я неправильно читаю цю ситуацію?
Чи існує спосіб використовувати UUID як первинні ключі в Django, не завдаючи зайвих проблем?
^ Деякі причини: приховування підрахунку об’єктів, запобігання "скануванню ідентифікатора", використання декількох серверів для створення неконфліктних об’єктів, ...
default
.