【问题标题】:Retrieving all records from a table of openerp with mako templates使用 mako 模板从 openerp 表中检索所有记录
【发布时间】:2014-06-16 19:00:43
【问题描述】:

我想知道如何使用 mako 模板从我的 openerp 7 中获取表的所有记录(在我的报告中显示)。 据我所知,在我的 mako 模板中,我有一个名为 objects 的可迭代对象,它是一个 browse_record(suri.flete.items_recorrida, 1)。

我的问题是如何获取表“suri.flete.items_recorrida”的所有记录,然后仅在报告中显示值 en_recorrida 和 finalizado 为 False 的项目。

在我的 mako 模板中(flete_rep_webkit.mako):

    %for item in objects:
        <tr>
            <td>${item.descripcion}</td>
            <td>${item.origen.nombre}(${item.origen.direccion},${item.origen.localidad})</td>
            <td>${item.destino.nombre}, (${item.destino.direccion},${item.destino.localidad})</td>
        </tr>
    %endfor

在我的解析器 .py 文件中(flete_webkit.py)

import time
from report import report_sxw
from osv import osv

class flete_webkit(report_sxw.rml_parse):
    def __init__(self, cr, uid, name, context):
        super(flete_webkit, self).__init__(cr, uid, name, context=context)
        self.localcontext.update({
            'time': time,
            'cr':cr,
            'uid': uid,
        })        

report_sxw.report_sxw('report.webkit.flete_items_recorrida',
                           'suri.flete.items_recorrida', 
                           '/suri/flete/report/flete_rep_webkit.mako',
                           parser=flete_webkit)

在我看来

<report auto="False" id="flete_webkit" model="suri.flete.items_recorrida" name="webkit.flete"  file="suri/flete/report/flete_rep_webkit.mako" string="Reporte prueba" report_type="webkit" />

在我的 .py 文件 (flete.py) 中

class items_recorrida(osv.osv):        
    _name = "suri.flete.items_recorrida"
    _columns = {
        'name' : fields.related('descripcion', 'name', type="many2one", relation="suri.flete.items_recorrida", string='Descripcion',context="{'form_view_ref' : 'suri.flete.formulario_flete_items_recorrida', 'tree_view_ref' : 'suri.flete.arbol_flete_items_recorrida'}"),
        'estado' : fields.boolean('Estado', required=True),
        'descripcion' : fields.char('Descripcion', size=128, required = True),
        'documentacion' : fields.char('Documentacion', size=128, required = False),
        'origen': fields.many2one('res.partner.sedes','Origen', required=True),#FK->res.partner.sedes
        'destino': fields.many2one('res.partner.sedes','Destino', required=True),#FK->res.partner.sedes
        'pedido_por': fields.many2one('res.users','Pedido por', required=True),#FK->res.users
        'id_flete': fields.many2one('suri.flete.recorrida','Numero de flete',required=False),#FK->suri.flete.recorrida        
        'nota': fields.char('Nota',size=128,required=False),
        'proyecto': fields.many2one('suri.proyectos.proyecto','Proyecto',required=False),#FK->suri.proyectos.proyecto
        'dimension': fields.char('Dimension Estimada', size=128, required = False),
        'peso': fields.char('Peso Estimado', size=128, required = False),
        'fragil': fields.boolean('Es fragil?', required=False),
        'urgente': fields.boolean('Es urgente?', required=False),
        'en_recorrida': fields.boolean('Esta en recorrida?', required=False,),
        'finalizado': fields.boolean('Esta finalizado?', required=False,) 
    }

    _defaults = {
    'en_recorrida' : False,
    'finalizado' : False,      
    }

    _rec_name = 'descripcion'

提前致谢。

【问题讨论】:

    标签: openerp mako openerp-7


    【解决方案1】:

    在解析器中创建一个方法,返回所有 finalizado 和 en_recorrida 为 False 的记录

    import time
    from report import report_sxw
    from osv import osv
    
    class flete_webkit(report_sxw.rml_parse):
        def __init__(self, cr, uid, name, context):
            super(flete_webkit, self).__init__(cr, uid, name, context=context)
            self.localcontext.update({
                'time': time,
                'cr':cr,
                'uid': uid,
                'get_records': self._get_records,
            })       
    
        def _get_records(self):
            rc_ids = self.pool.get('suri.flete.items_recorrida').search(self.cr, self.uid, [('en_recorrida', '=',  False),('finalizado', '=',  False)])
            return self.pool.get('suri.flete.items_recorrida').browse(self.cr, self.uid, rc_ids) 
    
    report_sxw.report_sxw('report.webkit.flete_items_recorrida',
                               'suri.flete.items_recorrida', 
                               '/suri/flete/report/flete_rep_webkit.mako',
                               parser=flete_webkit)
    

    在你的 mako 中像这样使用它

    %for item in get_records():
        <tr>
            <td>${item.descripcion}</td>
            <td>${item.origen.nombre}(${item.origen.direccion},${item.origen.localidad})    </td>
            <td>${item.destino.nombre}, (${item.destino.direccion},${item.destino.localidad})</td>
        </tr>
    %endfor
    

    【讨论】:

    • 您好,感谢您的帮助,非常感谢!我已经按照你说的修改了代码,但它在调试器中抛出了这个错误:File "/usr/lib/python2.7/dist-packages/mako/runtime.py", line 841, in _exec_template callable_(context, *args, **kwargs) File "memory:0xb10e82c", line 43, in render_body %for item in get_records(): TypeError: 'Undefined' object is not callable 你知道出了什么问题吗?
    • 别忘了把你的解析器导入__init__.py
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多