我在SQLFORM.grid中有一个自定义控制器,我正在使用链接。问题是(因此看起来)因为我在自定义函数工作时使用左连接,所以编辑和查看不起作用。
所以我的链接如下
links = [lambda row: A('',_class='glyphicon glyphicon glyphicon-remove-sign',
callback=URL('settings','deactivate',vars=dict(table='workers_skills',field = 'ws_status'
,value = row.workers_skills.id )))]
我的网格构造函数
grid_workersskills= SQLFORM.grid(query=query,left=[db.workers.on(db.workers_skills.ws_worker==db.workers.id),
db.skills.on(db.workers_skills.ws_skill==db.skills.id)],
fields=fields, searchable=False, orderby=[db.workers.w_nick_name],create=True,
deletable=False, editable=True, paginate=50, buttons_placement = 'right',
showbuttontext = False,
links = links,
#oncreate=myfunction,
ui = dict(widget='',
header='',
content='',
default='',
cornerall='',
cornertop='',
cornerbottom='',
button='button btn btn-default',
buttontext='buttontext button',
buttonadd='icon plus icon-plus glyphicon glyphicon-plus',
buttonback='icon leftarrow icon-arrow-left glyphicon glyphicon-arrow-left',
buttonexport='icon downarrow icon-download glyphicon glyphicon-download',
buttondelete='icon trash icon-trash glyphicon glyphicon-trash',
buttonedit='icon pen icon-pencil glyphicon glyphicon-pencil',
buttontable='icon rightarrow icon-arrow-right glyphicon glyphicon-arrow-right',
buttonview='icon magnifier icon-zoom-in glyphicon glyphicon-eye-open',
),
exportclasses = dict(csv_with_hidden_cols=False, html = False, tsv = False, tsv_with_hidden_cols=False, json = False))
问题是由row.workers_skills.id
引起的如果我保持这种方式我的功能停用工作正常,但当我点击编辑或查看记录时我收到错误
Row attribute has no object workers_skills
如果我把它放到row.id查看和编辑工作,但我的停用功能不是因为ID或记录没有创建。
上周我一直在努力解决这个问题。请帮忙
谢谢
答案 0 :(得分:3)
当网格涉及连接时,您必须通过row.table.field
格式引用行内的字段。但是,当您从这样的网格查看/编辑记录时,只显示来自单个表的记录(即,不再涉及连接),因此您现在必须通过{{1引用行中的字段格式。因为你的"链接"出现在网格和视图/编辑页面中,无论您使用哪种格式来引用id字段,都会导致这两个上下文之一出错。
因此,您需要做的就是确保您的代码在两种情况下都能正常运行。这是一个简单的伎俩:
而不是:
row.field
做的:
row.workers_skills.id
row.get('workers_skills', row).id
方法尝试检索' workers_skills'键,但如果它不存在,它会返回一个默认值,在这种情况下只是原始行。然后它检索" id"返回对象的字段(原始行或row.workers_skills子行)。