最佳答案
出于多种原因 ^ ,我希望在我的一些 Django 模型中使用 UUID 作为主键。如果我这样做了,我是否仍然可以使用外部应用程序,比如通过 ContentType 使用通用关系的“投票贡献”、“ django 投票”或“ django 标记”?
以“ django 投票”为例,Vote 模型如下:
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)
这个应用程序似乎假设被投票的模型的主键是一个整数。
不过,内置的评论应用似乎能够处理非整数 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")
对于使用 UUID 的第三方应用程序来说,这种“整数-PK 假定”的问题是否是一种常见的情况?或者,也许,我误解了这种情况?
有没有一种方法可以在 Django 中使用 UUID 作为主键而不会引起太多麻烦?