По ряду причин ^ я хотел бы использовать UUID в качестве первичного ключа в некоторых моих моделях Django.Если я это сделаю, смогу ли я использовать внешние приложения, такие как "contrib.comments", "django-голосования" или "django-tagging", которые используют общие отношения через ContentType?
Использование "django-голосования"Например, модель голосования выглядит следующим образом:
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)
Это приложение, по-видимому, предполагает, что первичным ключом для модели, по которой проводится голосование, является целое число.
Кажется, что встроенное приложение комментариев способно обрабатывать нецелые PK, хотя:
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 без особых проблем?
^ Некоторые из причин: сокрытие количества объектов, предотвращение «обхода идентификатора» по URL, использование нескольких серверов для создания неконфликтующих объектов, ...