我试图在web2py中创建一个由2个字段组成的SQLFORM.grid并计算它们,但我无法弄清楚如何去做。
模型
db.define_table('invocados',
Field('modulo_servico', 'string', label='Módulo (Serviço)', default=IS_LENGTH(2)),
Field('servico', 'string', default=IS_LENGTH(8)),
)
控制器
fields=(db.invocados.modulo_servico, db.invocados.servico)
Invocados=SQLFORM.grid(db.invocados.modulo_servico != db.invocados.modulo_consumidor, details=False, fields=fields, groupby=(db.invocados.modulo_servico | db.invocados.servico) , paginate=15)
我试图计算按modulo_servico和servico分组的所有记录。 我试过了:
fields=(db.invocados.modulo_servico, db.invocados.servico, db.invocados.count())
但它没有用。
你能帮忙吗?
答案 0 :(得分:1)
您可以使用网格中的链接显示结果:
SQLFORM.grid(db.invocados.modulo_servico != db.invocados.modulo_consumidor,
details=False,
fields=fields,
groupby=(db.invocados.modulo_servico | db.invocados.servico) ,
paginate=15,
links=[dict(header='Count', body=lambda row: row.modulo_servico + row.servico)])
答案 1 :(得分:0)
到目前为止,我一直在使用web2py,我得出结论,最好的解决方案是在控制器中返回数据并构建专用视图,以便您可以按Count字段对结果进行排序,如下所示:
<强>控制器:强>
def servexpostos():
q = db.invocados.modulo_servico != db.invocados.modulo_consumidor
rows = db(q).select(db.invocados.modulo_servico, db.invocados.servico, db.invocados.servico.count(), groupby=db.invocados.modulo_servico | db.invocados.servico)
return locals()
查看:强>
<div class="col-md-12">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Módulo</th>
<th>Nome Implementação</th>
<th># invocações de outros módulos</th>
</tr>
</thead>
<tbody>
{{for i,row in enumerate(rows):}}
{{if i==items_per_page: break}}
<tr>
<td>{{=row.invocados.modulo_servico}}</td>
<td>{{=row.invocados.servico}}</td>
<td align="middle"><span class="badge">{{=row._extra['COUNT(invocados.servico)']}}</span></td>
</tr>
{{pass}}
</tbody>
</table>
这个解决方案有更多的努力,因为我不使用SQLFORM.grid,我必须控制分页,排序等(Web开发人员的常见任务)......
一个更简单的方法,但不可能通过“Count”字段对结果进行排序,是使用SQLFORM.grid的links参数,并在每一行中添加一个子查询来计算记录。
示例:
SQLFORM.grid(db.invocados.modulo_servico != db.invocados.modulo_consumidor,
details=False,
fields=fields,
groupby=(db.invocados.modulo_servico | db.invocados.servico) ,
paginate=15,
links=[dict(header='Count', body=lambda row: db(db.invocados.servico == row.servico).count())])