Birkaç nedenden ötürü ^, bazı Django modellerimde birincil anahtar olarak bir UUID kullanmak istiyorum. Bunu yaparsam, ContentType aracılığıyla genel ilişkileri kullanan "Contrib.comments", "django-voting" veya "django-tagging" gibi dış uygulamaları kullanmaya devam edebilecek miyim?
Örnek olarak "django-voting" kullanıldığında, Oylama modeli aşağıdaki gibi görünür:
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)
Bu uygulama, oylanmakta olan model için birincil anahtarın bir tam sayı olduğunu varsayıyor gibi görünüyor.
Yerleşik yorum uygulaması, tamsayı olmayan PK'leri işleyebilir gibi görünüyor, ancak:
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")
Bu "tamsayı-PK varsayımlı" sorun, UUID'leri kullanmayı zorlaştıracak üçüncü taraf uygulamalar için yaygın bir durum mu? Ya da muhtemelen bu durumu yanlış mı yorumluyorum?
Django'da UUID'leri çok fazla soruna neden olmadan birincil anahtarlar olarak kullanmanın bir yolu var mı?
^ Nedenlerden bazıları: nesne sayılarını gizleme, url "kimlik taramasını" engelleme, çakışmayan nesneler oluşturmak için birden çok sunucu kullanma, ...
default
.