相关疑难解决方法(0)

在Uango模型中使用UUID作为主键(通用关系影响)

出于多种原因^,我想在我的一些Django模型中使用UUID作为主键.如果我这样做,我是否仍然可以使用"contrib.com","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)
Run Code Online (Sandbox Code Playgroud)

这个应用程序似乎假设被投票的模型的主键是一个整数.

内置的评论应用程序似乎能够处理非整数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")
Run Code Online (Sandbox Code Playgroud)

对于第三方应用程序而言,这种"整数假定PK"问题是否会成为一种常见情况,这会使使用UUID变得痛苦?或者,我可能会误读这种情况吗?

有没有办法在Django中使用UUID作为主键而不会造成太多麻烦?


^一些原因:隐藏对象计数,防止URL"id爬行",使用多个服务器创建非冲突对象,...

django uuid content-type primary-key django-models

81
推荐指数
5
解决办法
4万
查看次数

标签 统计

content-type ×1

django ×1

django-models ×1

primary-key ×1

uuid ×1