Mathesar 用户数据类型(User Data Type)完全指南:引用、显示、默认值与编辑追踪
数据库后端前端协作【免费下载链接】mathesarAn intuitive spreadsheet-like interface that lets users of all technical skill levels view, edit, query, and collaborate on Postgres data directly. 100% open source and self hosted, with native Postgres access control.项目地址https://gitcode.com/gh_mirrors/ma/mathesar点击查看免费下载导读Mathesar 的用户数据类型user data type让你能直接在数据库表中存储对 Mathesar 用户的引用整型用户 ID从而轻松记录谁创建了记录谁负责这项任务谁最后编辑了这条记录等信息。本文以官方用户指南 docs/docs/user-guide/user-type.md 为主体结合前端抽象类型配置、Django 数据模型、RPC 元数据接口与表单注入逻辑等仓库源码系统讲解用户列的添加、用户选择、显示字段配置、默认值设置、编辑追踪user tracking以及表单限制与典型用例帮助你在一张表里完整落地责任人与审计需求。用户数据类型概览用户数据类型把某条记录关联到某个 Mathesar 用户这件事以原生列的形式融入你的 PostgreSQL 数据表。其核心特性如下底层存储用户列实际存储的是 Mathesar 用户的 ID整数值。在前端抽象类型配置中user 类型的defaultDbType即DB_TYPES.INTEGER见 mathesar_ui/src/stores/abstract-types/type-configs/user/user.ts也就是数据库层面仍然是一个整数列只是由 Mathesar 的元数据层赋予其用户引用语义。展示方式用户列中的用户默认以用户名username展示也可以在列检查器column inspector中切换为显示名display name或邮箱email。可选范围只有**该数据库的协作者collaborator**才能被存入用户列。用户选择对话框record selector只会列出当前数据库的协作者。交互方式编辑单元格时会弹出一个可搜索的协作者列表供你选择。默认值用户列支持无默认值或指定默认用户两种默认值策略。编辑追踪每张表可以指定一个用户列自动记录谁最后编辑了每条记录。后端通过ColumnMetaData.user_display_field与TableMetaData.user_tracking_attnum两个字段承载上述配置见 mathesar/models/base.py 与 mathesar/models/base.py它们由迁移文件 mathesar/migrations/0011_columnmetadata_user_type.py 引入是用户类型功能的元数据基石。添加用户列添加用户列的方式与添加其他类型的列完全一致不需要任何 SQL 操作打开要添加用户列的表。点击Add Column图标。在列类型中选择User并为列命名例如Instructor、Assigned To。保存更改。创建完成后该列的每个单元格都可以直接在 Mathesar UI 中选择一个用户。从前端视角看用户类型的单元格渲染由UserCell.svelte承担见 mathesar_ui/src/components/cell-fabric/data-types/components/user/UserCell.svelte它会在单元格中展示用户的显示标签并提供下拉按钮唤起用户选择。选择用户点击空单元格单击、已有值单元格双击或单击激活后的下拉按钮用户单元格会打开一个可搜索的协作者列表点击空的用户单元格或双击已有值的单元格。弹出当前数据库协作者的可搜索列表。输入关键词按用户名、显示名或邮箱搜索用户。点击某个用户即可选中也可以通过该对话框清除已有选择。只有当前数据库的协作者才会出现在这个列表里。要让某个 Mathesar 用户变得可被选择需要先把他添加为该数据库的协作者collaborator详见 docs/docs/user-guide/collaborators.md。从源码实现看单元格的搜索候选来自CollaborationFeaturesContext提供的协作者 storeUserCell.svelte中collaboratorsApiStore解析出的协作者列表被映射为users再交给行选择器row seeker做可搜索选择见 UserCell.svelte。行选择器通过acquireUserSelection返回一个SummarizedRecordReference选中后以用户 ID 写入单元格值见 mathesar_ui/src/systems/row-seeker/RowSeekerController.ts。值得留意的是如果单元格里存的是一个已不在协作者列表中的用户 ID例如该用户被移除了数据库协作者权限UserCell会显示一条broken link提示——带警告图标、ID 以删除线展示并提示This user does not exist or is not a collaborator on this database对应国际化文案见 mathesar_ui/src/i18n/languages/en/dict.json。这说明展示层对用户已失效的情况做了显式兜底。配置显示选项Display Options用户列展示的是哪个字段可在列检查器中配置。默认展示用户名也可切换为显示名或邮箱打开包含用户列的表。点击列头打开列检查器column inspector。在Display Options一节中找到Field to represent each user。从三个选项中选择Username默认用户的登录用户名Display Name用户的完整姓名full_nameEmail用户的邮箱地址选定的显示字段会贯穿 Mathesar 全局生效——无论是表格单元格、记录摘要还是其他引用该列值的地方都会按该字段展示。该配置的前端定义位于用户类型的显示配置表单中displayField变量的枚举为[full_name, email, username]默认值为username见 mathesar_ui/src/stores/abstract-types/type-configs/user/user.ts。保存后该值会作为列元数据user_display_field写入后端determineDisplayOptions返回{ user_display_field: ... }见 user.ts。后端展示逻辑在 mathesar/utils/user_display.py 中实现get_user_display_values批量查询 DjangoUser模型按full_name/email/username取属性并组装显示值见 user_display.pyget_user_linked_record_summaries则扫描列元数据中所有设置了user_display_field的列把记录结果里的用户 ID 批量转换为显示标签见 user_display.py。对应的单元测试覆盖了空 ID、单用户/多用户、缺失字段、空字段值、null 值等边界情况见 mathesar/tests/utils/test_user_display.py。前端getUserLabel也遵循同一逻辑当所选字段为空时回退显示用户 ID见 mathesar_ui/src/utils/userUtils.ts。设置默认值用户列支持两种默认值策略配置位置在列检查器的Default Value一节无默认值No default列没有默认值每条记录都必须由用户手动选择。适合创建人这类无法预设的场景。指定默认用户Set a default user为新建记录设置一个固定的默认用户。当创建新记录时该列会自动填充为你选定的用户。设置步骤打开用户列的列检查器。在Default Value一节选择Set a default user。在弹出的用户选择对话框中选择用户。保存更改。这一机制非常适合任务指派类场景例如把某个项目的Assigned To列默认设为项目经理新记录创建即自动归属。追踪谁编辑了记录User Tracking每张表可以指定一个用户类型列用于自动记录谁最后编辑了这条记录。与默认值不同这是表级配置而不是列级配置打开要追踪编辑操作的表。打开Table Inspector找到User tracking一节。从下拉列表中选择一个用户列选择None可关闭追踪。设置之后Mathesar 会在每次新增或编辑记录时把当前登录用户写入该列——包括通过表单提交产生的修改。被追踪的列在 UI 中不可手动编辑。几点重要约束当前操作者必须是该数据库的协作者追踪列才会被填充。每张表同时只能指定一个追踪列表内任意用户类型列都可作为候选。追踪只覆盖经由 Mathesar 的修改通过 Mathesar含表单修改记录会更新该列绕过 Mathesar 的直接数据库写入不会触发更新。源码层面的实现追踪配置存储于TableMetaData.user_tracking_attnum即被追踪列在表中的 attnum属性编号。RPC 端点tables.metadata.list/tables.metadata.set负责读写该元数据TableMetaDataBlob.user_tracking_attnum的注释明确写道When set, adding or patching a record will automatically populate this column with the current users ID见 mathesar/rpc/tables/metadata.py。写入路径的关键实现在apply_track_editing_user当表元数据存在user_tracking_attnum时把记录定义中的该列值直接替换为当前user_id见 mathesar/utils/user_display.py。表单提交场景则由_inject_user_tracking_fields兜底它会为表单中每个插入上下文按table_oid/parent_key/depth分组查找user_tracking_attnum若表单字段未显式覆盖该列就注入一个合成字段把该列设为当前用户 ID见 mathesar/utils/forms.py。这正是通过表单提交也会自动填充追踪列的底层原因与文档中的提示完全对应。已知限制用户列不能用于表单用户类型列不能被添加到 表单forms 中原因在于表单可以匿名提交而读取 Mathesar 用户列表需要身份认证匿名场景下用户字段无法正常工作。如果你尝试把用户列加入表单会看到错误提示表单字段选项中会自动排除用户列。需要区分的是追踪列不受此限制。即便某张表指定了追踪用户列且该字段不能出现在表单里表单提交被处理时该列仍会被自动填充如上文_inject_user_tracking_fields所述。从代码看表单字段校验层面对用户显示类错误有专门处理ErrorField.ts中定义了错误码COLUMN_USER_DISPLAY: -31027消息文案为form_field_column_user_display见 mathesar_ui/src/systems/data-forms/form-maker/data-form-utilities/fields/ErrorField.ts印证了用户列不适用于表单字段的设计约束。典型用例用户列在以下场景中最有价值记录归属追踪记录谁创建/拥有这条记录如Created By、Assigned To。审计轨迹通过表级User tracking设置指定一个用户列记录谁最后修改了记录。任务分配把任务或条目指派给特定用户。审批工作流记录谁批准/审查了这条记录。以一张Projects项目表为例可以这样组合使用Assigned To列默认值设为某位项目经理的 Mathesar 用户新建项目自动归属。Last Modified By列指定为表的追踪用户列任何经 Mathesar 的增改都会自动记录操作者。总结Mathesar 的用户数据类型将用户引用变成一种一等公民的列类型底层以整数存储用户 ID上层通过列元数据user_display_field控制展示字段、通过表元数据user_tracking_attnum实现编辑追踪并在前端提供可搜索的协作者选择器与失效用户兜底提示。结合表单注入逻辑追踪列甚至能在匿名表单提交时依然被正确填充。对于需要责任人、审计、指派的协作型数据管理场景用户列是开箱即用的一站式方案。赞分享数据库后端前端协作【免费下载链接】mathesarAn intuitive spreadsheet-like interface that lets users of all technical skill levels view, edit, query, and collaborate on Postgres data directly. 100% open source and self hosted, with native Postgres access control.项目地址https://gitcode.com/gh_mirrors/ma/mathesar点击查看免费下载相关推荐Mathesar 0.10.0 版本详解User 数据类型、最后编辑者追踪与 PostgreSQL ENUM 完整支持Mathesar 0.10.0 版本详解User 数据类型、最后编辑者追踪与 PostgreSQL ENUM 完整支持 Mathesar 0.10.0 是面向数据库后端前端协作ImHex数据解释器完全指南多种数值类型显示与编辑支持ImHex数据解释器完全指南多种数值类型显示与编辑支持 ImHex是一款功能强大的十六进制编辑器专为逆向工程师、程序员和需要深度数据分析的用户设计。其中 数桌面应用开发工具逆向工程terraform-aws-eks 用户数据与节点引导User Data Bootstrapping完整指南terraform aws eks 用户数据与节点引导User Data Bootstrapping完整指南 导读 本文聚焦 terraform aws云原生IaC容器编排集群管理上一篇免费法线贴图生成器实测拖一张灰度图进去5分钟让模型拥有凹凸质感下一篇Vue Flow 连接校验Connection Validation实战指南从 Handle 到全局的三种拦截方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从pip+venv到uv:Python工具链现代化迁移完整复盘

从pip+venv到uv:Python工具链现代化迁移完整复盘

刚把手上一个用了三四年的 Python 项目从pip venv requirements.txt pyenv pipx这套老阵容,整体切到了uv上,目前跑了一周多,CI 也换完了,整体体感确实值得单独写一篇记录。这个标题我早就想占了,现在终于有内容可填…

2026/10/13 2:58:42 阅读更多 →
LiteFlow-01:内核机制深度拆解

LiteFlow-01:内核机制深度拆解

LiteFlow-01:内核机制深度拆解 LiteFlow 是一款轻量、快速且高度解耦的业务规则编排引擎。为了彻底掌握其底层的运行机制,最好的方式是直接抛开任何 IoC 容器的黑盒封装,完全从最原生的模式切入。 本文将采用**“实战代码先行,底层…

2026/10/13 2:58:42 阅读更多 →
以太网测试步骤

以太网测试步骤

控制器提测系统Polarion:http://10.2.9.64/polarion/ 测试问题BUG提交系统JIRA:https://yfjira.mychery.com/browse 测试报告上传仓库:https://my-ichery.feishu.cn/drive/folder/VFCufJh1eljjyodTtFccZtDyndb?fromfrom_copylink 一、实物…

2026/10/13 2:58:42 阅读更多 →

最新新闻

被动审计实战:用icedump与nticedump实现内网资产盘点与风险发现

被动审计实战:用icedump与nticedump实现内网资产盘点与风险发现

简介:这份zip合集提供icedump 6.026与nticedump 1.14两套经典调试工具的完整文件包,面向系统程序员、逆向工程师与安全研究人员,覆盖用户态进程内存分析和Windows NT内核级转储两大场景。压缩包共含410个文件,整体仅2.62MB&#x…

2026/10/13 3:39:53 阅读更多 →
中国象棋源码实战:规则引擎与状态空间建模

中国象棋源码实战:规则引擎与状态空间建模

简介:这是一份面向Java初学者的中国象棋桌面程序源码学习项目,适用于算法逻辑训练、GUI开发入门与网络编程实践。项目实现了基础棋盘交互、走子规则校验、悔棋功能及简易联网对战模块,代码经过变量与函数重命名优化,并添加必要中文…

2026/10/13 3:39:53 阅读更多 →
Linux 服务器用 Aspera/ascp 高速下载基因组数据的完整指南

Linux 服务器用 Aspera/ascp 高速下载基因组数据的完整指南

简介:这是一款专为基因组大数据传输设计的高速下载工具——Aspera Connect 3.7.4.147727 Linux 64 位安装包,面向生物信息学研究人员、生信初学者以及需从 NCBI、EBI 等公共数据库批量获取测序数据的使用者。它基于 IBM FASP 协议,能够有效规…

2026/10/13 3:39:53 阅读更多 →
计算机系统考点梳理:补码、栈帧与缓存刷题技巧

计算机系统考点梳理:补码、栈帧与缓存刷题技巧

大二上那门计算机系统课,我是被“做题家”三个字摁着脑袋走完的。一开始觉得这只是自嘲,好像谁刷题多、背得熟,谁就是不懂原理的考试机器;等真到了期末复习,我才发现这门课光靠“看懂”完全不够,你必须在纸…

2026/10/13 3:39:53 阅读更多 →
SpringBoot+Vue校园一卡通系统实战:从架构设计到部署上线全解析

SpringBoot+Vue校园一卡通系统实战:从架构设计到部署上线全解析

校园一卡通项目我前后做过好几个版本,从最初的单体JSP到后面的前后端分离,踩过的坑能写满一个笔记本。这次分享的基于SpringBoot加Vue的校园一卡通管理系统,是目前结构最清晰、也最适合拿来学习和二次开发的一套。无论是应付毕业设计&#xf…

2026/10/13 3:39:53 阅读更多 →
Flutter for OpenHarmony实战:二手置换App设置页开发全解析

Flutter for OpenHarmony实战:二手置换App设置页开发全解析

做Flutter for OpenHarmony二手物品置换App,设置页看起来是所有模块里最不起眼的那一个。真正动手写的时候你会发现,它几乎是整个App里横跨技术面最杂的页面:本地存储、主题切换、通知权限、缓存清理、账号安全全都要在这个页面里落地&#x…

2026/10/13 3:38:53 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →