由于一些原因^,我想在我的一些Django模型中使用UUID作为主键.如果我这样做了,我是否仍然可以使用外部应用程序,如"contri.Comments"、"Django-Voting"或"Django-tagging",这些应用程序通过contentType使用泛型关系?
以"Django-Voting"为例,投票模型如下所示:
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)
这个应用程序似乎假设正在投票的模型的主键是一个整数.
内置的 comments 应用程序似乎能够处理非整数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变得很痛苦?或者,可能,我误解了这种情况?
有没有办法在Django中将UUID用作主键而不会造成太多麻烦?
^ Some of the reasons: hiding object counts, preventing url "id crawling", using multiple servers to create non-conflicting objects, ...