web2py sqlform网格链接左边的连接问题

时间:2015-11-01 03:03:46

标签: hyperlink grid web2py

我在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或记录没有创建。

上周我一直在努力解决这个问题。请帮忙

谢谢

1 个答案:

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