为什么删除记录忽略了web2py中的格式?

时间:2015-12-02 16:51:56

标签: web2py

我有一张桌子:

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而不是名字?

对不起我的英文,并提前感谢任何回应。

1 个答案:

答案 0 :(得分:1)

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

如果你考虑一下,一旦从原始表中删除了一条记录,当前记录的想法并没有真正意义。因此,一旦原始记录被标记为非活动状态,represent字段的current_record函数可能更适合显示None之类的内容。

无论如何,如果你真的想要从已删除的记录中看到名称,那么在创建显示存档表的网格之前,你可以暂时禁用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