web2py sqlform grid links on left join 问题
web2py sqlform grid links on left join problems
我在 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 或记录。
上周我一直在为此苦苦挣扎。请帮忙
谢谢
当网格涉及连接时,您必须通过 row.table.field
格式引用行中的字段。但是,当您 view/edit 来自这样一个网格的记录时,只会显示来自单个 table 的记录(即,不再涉及连接),因此您现在必须引用一个字段通过 row.field
格式行。因为您的 "link" 出现在网格和 view/edit 页面中,无论您使用哪种格式引用 id 字段,都会导致这两种情况之一出现错误。
因此,您需要做的就是确保您的代码在这两种情况下都能正常工作。这是一个简单的技巧:
而不是:
row.workers_skills.id
做:
row.get('workers_skills', row).id
.get()
方法尝试检索 'workers_skills' 键,但如果它不存在,它会 returns 一个默认值,在本例中就是原始值排。然后检索返回对象的 "id" 字段(原始行或 row.workers_skills 子行)。
我在 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 或记录。
上周我一直在为此苦苦挣扎。请帮忙
谢谢
当网格涉及连接时,您必须通过 row.table.field
格式引用行中的字段。但是,当您 view/edit 来自这样一个网格的记录时,只会显示来自单个 table 的记录(即,不再涉及连接),因此您现在必须引用一个字段通过 row.field
格式行。因为您的 "link" 出现在网格和 view/edit 页面中,无论您使用哪种格式引用 id 字段,都会导致这两种情况之一出现错误。
因此,您需要做的就是确保您的代码在这两种情况下都能正常工作。这是一个简单的技巧:
而不是:
row.workers_skills.id
做:
row.get('workers_skills', row).id
.get()
方法尝试检索 'workers_skills' 键,但如果它不存在,它会 returns 一个默认值,在本例中就是原始值排。然后检索返回对象的 "id" 字段(原始行或 row.workers_skills 子行)。