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 子行)。