为什么删除的记录会忽略其在 web2py 中的格式?

Why deleted record ignores its format in web2py?

我有一个 table:

db.define_table('mytable', Field('name', 'string'), Field('is_active', 'boolean', writable=False, readable=False, default=True), format='%(name)s')

我为其启用了记录版本控制。后来我为 mytable_archive 创建了一个网格。这个网格有一个 current_record 列,它显示了记录的名称,这要归功于我早先指定的格式,但是如果我删除这个记录(web2py 将 is_active 字段设置为 false),我的网格不会以我早先指定的格式显示 current_record 的格式,它只显示 ID。 我知道记录实际上并没有被删除,那为什么我的网格只显示这条记录 ID 而不是名称?

抱歉我的英语不好,提前感谢您的任何回复。

当您指定 format 参数时,任何引用 table 的引用字段都将获得默认的 represent 属性,该属性将从 table 中获取引用的记录并对其应用 represent 函数。但是,当使用记录版本控制时,已删除的记录(即带有 is_active == False 的记录)会自动从所有查询中过滤掉,因此 represent 函数将无法检索引用的记录,因此无法生成表示的值(并将回退到显示存储在参考字段中的原始 ID)。

不过,如果您考虑一下,一旦从原始记录中删除了一条记录 table,当前记录的想法就没有意义了。因此,一旦原始记录被标记为无效,current_record 字段的 represent 函数可能更适合显示类似 None 的内容。

无论如何,如果您真的想从已删除的记录中查看名称,在创建显示存档的网格之前 table,您可以通过执行以下操作暂时禁用 is_active 过滤:

db.mytable._common_filter = None

请注意,如果您在同一请求中对 db.mytable 执行任何后续查询,则必须在继续之前恢复 db.mytable._common_filter

common_filter, db.mytable._common_filter = db.mytable._common_filter, None
grid = SQLFORM.grid(db.mytable_archive, ...)
db.mytable._common_filter = common_filter