Z wielu powodów ^ chciałbym użyć UUID jako klucza podstawowego w niektórych moich modelach Django. Jeśli to zrobię, czy nadal będę mógł korzystać z aplikacji zewnętrznych, takich jak „contrib.comments”, „django-voting” lub „django-tagging”, które używają ogólnych relacji za pośrednictwem ContentType?
Na przykładzie „django-voting” model Vote wygląda następująco:
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)
Ta aplikacja wydaje się zakładać, że kluczem podstawowym modelu, na który głosowano, jest liczba całkowita.
Wydaje się, że wbudowana aplikacja do komentarzy jest w stanie obsłużyć niecałkowite 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")
Czy ten problem z zakładaniem liczby całkowitej PK jest powszechną sytuacją w przypadku aplikacji innych firm, która utrudniałaby używanie identyfikatorów UUID? A może źle odczytałem tę sytuację?
Czy istnieje sposób na użycie identyfikatorów UUID jako kluczy podstawowych w Django bez powodowania większych problemów?
^ Niektóre z powodów: ukrywanie liczby obiektów, zapobieganie indeksowaniu adresów URL, używanie wielu serwerów do tworzenia obiektów nie powodujących konfliktów, ...
default
.