Web2py SQLFORM.grid 选择字段但不显示在网格中

Web2py SQLFORM.grid Selecting a field but not displaying in grid

我的网格显示带有 LEFT OUTER JOIN 的产品,以在产品已被选中时显示额外信息。

一切都很好。

现在我想将产品描述添加到产品名称的标题属性中。因此,当用户将鼠标悬停在(鼠标悬停?)名称上时,就会显示描述。

db.product.productname.represent = lambda value, row: A(value, _href=URL('offer', 'view_product', args=row.product.id), _title=row.product.description)

这在 db.product.description 包含在网格的字段中时有效。但是随后也会显示该列,这是我不想要的。当我设置 .readable = False 时。列不显示,描述也不显示

我也尝试过使用 headers 仅指定我想要显示的字段,但它仍然显示描述列。

如何在查询中包含该字段但不在网格中显示它?

这是整个网格:

    pagecontent = SQLFORM.grid(query,
                    left=db.product_offer_item.on((db.product.id == db.product_offer_item.product_id)\
                                                   & (db.product_offer_item.offer_id == currentquote)),
                    args=[groupid],
                    create=False,
                    editable=False,
                    deletable=False,
                    details=False,
                    csv=False,
                    orderby=db.product.productname,
                    fields=[db.product.productname,
                            db.product.purchasecost,
                            db.product.monthlycost,
                            db.product_offer_item.optional,
                            db.product_offer_item.quantity,
                            db.product_offer_item.discount,
                            db.product.description # Here is the problem field
                            ],
                    # headers={'product.productname' : db.product.productname.label,
                    #             'product.purchasecost' : db.product.purchasecost.label,
                    #             'product.monthlycost' : db.product.monthlycost.label,
                    #             'product_offer_item.optional' : db.product_offer_item.optional.label,
                    #             'product_offer_item.quantity' : db.product_offer_item.quantity.label,
                    #             'product_offer_item.discount' : db.product_offer_item.discount.label},
                    maxtextlength = 100,
                    links=[lambda row: A(T('Update'),
                                                    _href='#',
                                                    _class='button btn btn-default',
                                                    _id=row.product.id,
                                                    _name='btnUpdate')
                          ]

                    )

更新按钮没有 link 因为它是由 js 处理的,以解决无法使每一行都有自己的表单的问题。

我已经解决了这个问题,方法是将我不想显示的字段作为列表中的第一个字段(因此它是第一列),然后将表示设置为隐藏 div.

db.product.description.represent = DIV(' ', _style='display:None')

并隐藏 header,在网格中将此列的 header 设置为相同。

headers = {'product.productname':DIV(' ', _style='display:None)

利用列的边距,它在 table 的开头形成一个非常小的 space。甚至不明显。如果小 space 更合适,那么将字段移动到顺序中的其他位置同样容易。

现在,在 title 属性中使用描述来代表产品名称。

db.product.productname.represent = lambda value, row: A(value,
                                                        _href=URL('offer', 'view_product', args=row.product.id),
                                                        _class='blacklinks',
                                                        _title=row.product.description)