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

时间:2017-02-20 21:36:02

标签: python web2py

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

一切都很棒。

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

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。该列不会显示,但也不会显示说明。

我还尝试使用标题来仅指定我想要显示的字段,但它仍显示Description列。

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

这是整个网格:

    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')
                          ]

                    )

更新按钮没有链接,因为它由js处理,以解决无法使每一行成为自己的形式的问题。

1 个答案:

答案 0 :(得分:0)

我已经通过将我不希望显示的字段包含在列表中的第一个字段(因此它是第一列)来解决这个问题,然后将表示设置为隐藏的div。

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

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

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

使用列的边距,它会在表格的开头处创建一个非常小的空间。甚至都不明显。如果小空间更合适,那么将字段移动到顺序中的其他位置也同样容易。

现在,带有title属性中描述的productname的表示可以使用。

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