【问题标题】:Count record in SQLFORM (web2py)SQLFORM (web2py) 中的计数记录
【发布时间】:2015-10-01 22:16:51
【问题描述】:

我正在尝试在 web2py 中创建一个 SQLFORM.grid,按 2 个字段分组并计算它们,但我不知道该怎么做。

型号

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())

但它不起作用。

你能帮忙吗?

【问题讨论】:

  • 可悲的是,只有少数人使用 web2py...

标签: web2py


【解决方案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)])

【讨论】:

  • 您的答案并非 100% 正确,但我将您的答案标记为有用,因为您为我指明了正确的方向。我编辑了我之前的答案,并在更正中包含了您的解决方案。谢谢
【解决方案2】:

到目前为止,我一直在使用 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 开发人员的常见任务)...

一种更简单但不可能按“计数”字段对结果进行排序的方法是使用 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())])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多