我有一张桌子:
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而不是名字?
对不起我的英文,并提前感谢任何回应。
答案 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