Untuk sejumlah alasan ^, saya ingin menggunakan UUID sebagai kunci utama dalam beberapa model Django saya. Jika saya melakukannya, apakah saya masih dapat menggunakan aplikasi luar seperti "contrib.comments", "django-voting" atau "django-tagging" yang menggunakan hubungan umum melalui ContentType?
Menggunakan "django-voting" sebagai contoh, model Vote terlihat seperti ini:
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)
Aplikasi ini tampaknya mengasumsikan bahwa kunci utama untuk model yang dipilih adalah bilangan bulat.
Aplikasi komentar bawaan tampaknya mampu menangani PK non-integer, meskipun:
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")
Apakah masalah "diasumsikan PK dengan bilangan bulat" ini merupakan situasi umum untuk aplikasi pihak ketiga yang akan membuat penggunaan UUID menyebalkan? Atau, mungkin, apakah saya salah membaca situasi ini?
Adakah cara untuk menggunakan UUID sebagai kunci utama di Django tanpa menyebabkan terlalu banyak masalah?
^ Beberapa alasan: menyembunyikan jumlah objek, mencegah url "perayapan id", menggunakan beberapa server untuk membuat objek yang tidak bertentangan, ...
default
.