Aus mehreren Gründen möchte ich in einigen meiner Django-Modelle eine UUID als Primärschlüssel verwenden. Wenn ich dies tue, kann ich dann weiterhin externe Apps wie "Contrib.comments", "Django-Voting" oder "Django-Tagging" verwenden, die generische Beziehungen über ContentType verwenden?
Am Beispiel von "Django-Voting" sieht das Abstimmungsmodell folgendermaßen aus:
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)
Diese App scheint davon auszugehen, dass der Primärschlüssel für das Modell, über das abgestimmt wird, eine Ganzzahl ist.
Die integrierte Kommentar-App scheint jedoch in der Lage zu sein, nicht ganzzahlige PKs zu verarbeiten:
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")
Ist dieses "Integer-PK-angenommene" Problem eine häufige Situation für Apps von Drittanbietern, die die Verwendung von UUIDs zu einem Problem machen würden? Oder verstehe ich diese Situation möglicherweise falsch?
Gibt es eine Möglichkeit, UUIDs als Primärschlüssel in Django zu verwenden, ohne zu viele Probleme zu verursachen?
^ Einige der Gründe: Ausblenden der Anzahl der Objekte, Verhindern des "Crawls" von URLs, Verwenden mehrerer Server zum Erstellen nicht widersprüchlicher Objekte, ...
default
.