2017-02-20 5 views
0

내 격자는 LEFT OUTER JOIN이있는 제품을 표시하여 제품이 이미 선택된 경우 추가 정보를 표시합니다.Web2py SQLFORM.grid 필드를 선택했지만 표에 표시하지 않습니다.

모든 작품이 훌륭합니다.

이제 제품 이름의 제목 속성에 제품 설명을 추가하고 싶습니다. 따라서 사용자가 이름 위로 마우스를 가져 가면 이름 설명이 표시됩니다. db.product.description가 그리드의 필드에 포함 된 경우

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

이 작동합니다. 그러나 그때 칼럼도 표시됩니다. 나는 원하지 않습니다. .readable = False로 설정할 때. 열은 표시되지 않지만 설명은 표시되지 않습니다.

또한 표시 할 필드 만 지정하기 위해 헤더를 사용했지만 설명 열을 계속 표시하려고했습니다.

필드를 쿼리에 포함 시키지만 표에 표시하지 않으려면 어떻게해야합니까? 그 자체가 폼의 모든 행을 할 수없는 문제를 해결하기 위해 JS에 의해 처리되기 때문에

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

        ) 

업데이트 버튼에는 링크가 없습니다 :

다음은 전체 그리드입니다.

답변

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)