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

2023-11-23

由于多种原因^,我想在我的一些 Django 模型中使用 UUID 作为主键。如果我这样做,我仍然可以使用通过 ContentType 使用通用关系的外部应用程序,例如“contrib.comments”、“django-voting”或“django-tagging”吗?

以“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)

该应用程序似乎假设正在投票的模型的主键是整数。

不过,内置评论应用程序似乎能够处理非整数 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, ...

如文档中所示,从 Django 1.8 开始,有一个内置的 UUID 字段。使用 UUID 与使用整数时的性能差异可以忽略不计。

import uuid
from django.db import models

class MyUUIDModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

你也可以检查这个答案了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Django 模型中使用 UUID 作为主键(通用关系影响) 的相关文章

随机推荐

  • 处理大量行时,TMemo 速度慢得令人痛苦

    我的 TMemo 中有 100000 行 我想做类似的事情 for i 0 to Memo Lines Count 1 do Memo Lines i SomeTrim Memo Lines i 但速度是每秒0 5行 添加 BeginUpd
  • 如何从 iOS 上的硬件键盘检测按键向上/按键按下事件?

    虽然 SO 上发布了许多关于黑客键盘工作的方法 例如 iOS 7下蓝牙键盘如何支持上下方向键 or 接收iPhone键盘事件 它们都没有记录 是否可以使用公共 API 在 iOS 中检测来自硬件键盘 例如蓝牙 的 keyUp keyDown
  • Solr 中的查询超时

    我通过自定义开发的层对 solr 进行查询 并且在我的层中超时的少数查询仍在 solr 实例中 solr 中是否有一个参数可用于使特定查询超时 如中所述客户端断开连接后 Solr 查询继续吗 and 写在 Solr 常见问题解答中 在内部
  • Google BigQuery 的 Google App Engine 授权

    我已按照中的说明进行操作https developers google com bigquery authorization service accounts appengine从 App Engine 到 bigquery 进行一些查询
  • 带指针的结构体的 const 正确性

    我有一个包含一些指针的结构 我希望这些值是不可修改的 但简单地在前面写 const 并不会使结构成员不可变 typedef struct int x int y point void get const point p int x int
  • 有没有一种编程方法可以检查 Linux 上当前的 rpath?

    我知道可以使用readelf d
  • javafx 多个按钮到同一个处理程序

    我尝试制作一个简单的计算器 有 20 个按钮和一个处理程序 在java中 我可以在ActionPerformed中使用 if 语句和event getSource 来检查按下了哪个按钮 但它不适用于javafx中的处理程序 javafx 中
  • Ember.js 嵌套文件夹,如路由(包含斜杠)

    我正在使用 Ember js 构建一个具有文件管理器功能的应用程序 我想要嵌套文件夹的 URL 形式为 文件 嵌套 内部 它工作得很好linkTo 但是 如果我刷新 或直接转到 URL 则会收到错误消息 没有路由与 URL files Ne
  • 如何在 java 8 中迭代 JSONArray

    我有以下代码 它使用for loop迭代 a 中的元素JSONArray import org apache log4j Logger import org json JSONArray import org json JSONObject
  • Eclipse 调试器是否支持保存/恢复或检查点/倒回?

    我的意思如下 通过一个例子来说明 我启动我的 Java 应用程序 它恰好是一个模拟器 该应用程序运行了 1 小时并失败 我想在调试模式下重新启动我的应用程序 将其运行到第 59 分钟 然后开始单步执行代码 在任何时候 我都想回到第 59 分
  • 我的 php 网站被作为图像上传的代码攻击了..?

    昨天我的网站被收录了 攻击者将index php 文件更改为他们自己的 包含他们所有的荣耀消息和问候语 我已将此情况通知托管公司 我们在专用服务器上运行 就我而言 我正在尝试修复任何似乎是原因的问题 因为我仍然无法指出我们的问题到底是如何发
  • 将 HTML 编码从 UTF-8 切换到 UTF-16 时可能会出现什么问题?

    对于 HTML 编码从 UTF 8 更改为 UTF 16 有何影响 我想知道您对这个问题的想法 在做出这样的改变之前我需要考虑一些事情吗 注意 由于我需要处理大量的日文和中文文本 所以很感兴趣 我能想到一些会出错的事情 您必须在 HTTP
  • Proguard:避免与预混淆的库 JAR 发生命名冲突

    看来 Proguard 在重命名 重新打包类时并没有尝试避免与库 JAR 中的类发生命名冲突 这是正确的 还是我配置不正确 我正在混淆使用最新 Google AdMob SDK 的 Android 应用程序 之前我使用旧的 AdMob SD
  • 如何通过 Apache Camel 调用 RESTful 服务?

    我目前正在使用 HTTP 方法来调用某些 URL 这将产生 JIRA 问题 现在我想使用 Apache Camel 我该如何使用它 我需要通过Camel调用以下链接 http localhost 8080 rest api 2 projec
  • 如何在 POSIX sh 中获取脚本目录?

    我的 bash 脚本中有以下代码 现在我想在 POSIX sh 中使用它 我该如何转换它 DIR cd dirname BASH SOURCE 0 gt dev null pwd The POSIX shell sh counterpart
  • 在react/redux应用程序中隐藏api url(代理)

    我担心我的 React Redux 应用程序的安全性 因为我的 api url 在捆绑的 app js 文件中向公众公开 我一直在研究这个 一些开发人员以某种方式代理它 即我可以使用而不是使用我的 api urlapi 每当我与类似的库进行
  • 如何查找加载到进程中的DLL及其位置等

    我使用过 Process Explorer 但我忘记了另一个实用程序 它可以让您查看进程从何处加载 图像文件 以及内存中的 dll 以及它们从何处加载 Process Explorer 对我来说仅适用于托管程序集 还有什么是原生的吗 Pro
  • 移动 numpy 数组中的元素

    这个问题在底部包含它自己的答案 使用预先分配的数组 后续行动来自这个问题几年前 numpy 中有一个规范的 shift 函数吗 我没有看到任何东西文档 这是我正在寻找的简单版本 def shift xs n if n gt 0 return
  • 三元表达式中的 NullPointerException 为 null Long

    为什么下面这行代码会产生NullPointerException Long v 1 2 Long MAX VALUE Long null 据我所知 正在执行拆箱操作null 但为什么 注意 Long v Long null 不产生异常 因此
  • 在 Django 模型中使用 UUID 作为主键(通用关系影响)

    由于多种原因 我想在我的一些 Django 模型中使用 UUID 作为主键 如果我这样做 我仍然可以使用通过 ContentType 使用通用关系的外部应用程序 例如 contrib comments django voting 或 dja