在SQLFORM中记录记录(web2py)

时间:2015-10-01 22:16:52

标签: web2py

我试图在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())

但它没有用。

你能帮忙吗?

2 个答案:

答案 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())])