出于多种原因^,我想在一些Django模型中使用UUID作为主键。如果我这样做,我还能够使用"contrib.comments"、"django-voting"或者"django-tagging"等外部应用程序吗?这些应用程序通过ContentType使用通用关系。
以"django-voting"为例,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)
这个应用程序似乎假定被投票模型的主键是一个整数。
不过内置的评论应用程序似乎能够处理非整数主键:
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变得麻烦?或者,可能是我误读了这种情况?
有没有一种方法可以在Django中使用UUID作为主键而不会引起太多麻烦?
^ 一些原因:隐藏对象计数,防止URL“ id爬行”,使用多个服务器创建不冲突的对象,...