Skip to Content
Menu
This question has been flagged
4 Replies
18868 Views

Goodnight,

how can I iterate in the qweb report, a dictionary list. try with: (odoo11)

* <t t-foreach = "records" t-as = "det">

but I have the following error, or how could I do it.

the list returned by the sql query is:

<class list>

[{price_total: 1044.3, number: F001-00000001, product_id: 32}, {price_total: 1044.3, number: F001-00000004, product_id: 32}, {price_total: 29.5, number: F001-00000005, product_id: 28}, {price_total: 16.0, number: F001-00000007, product_id: 48}]

models:

def imprimir(self):

        records = []

        records = self._sql_get_line_for_report(self.fecha_inicio,self.fecha_fin)

 return self.env.ref('report_comprobantes_efact.linea_report_formato_pdf').report_action(self,records)

***report.xml 

 <table class="table table-condensed" >

                                        <thead>

                                            <tr>

                                                <th>CUO</th>

                                                <th>FECHA EMISION</th>

                                                <th>GLOSA</th>

                                            </tr>

                                        </thead>

                                        <tbody>

                                            <t t-foreach="records" t-as="det">

                                                <tr style="border:solid grey 4px">

                                                    <td><span t-esc="det['number']"/></td>

                                                    <td><span t-esc="det['price_total']"/></td>

                                                    <td><span t-esc="det['product_id']"/></td>    

                                                </tr>

                                            </t>

                                        </tbody>

                                </table>

error:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1624, in report_download
    response = self.report_routes(reportname, converter='pdf', **dict(data))
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 515, in response_wrap
    response = f(*args, **kw)
  File "/mnt/extra-addons/report_xlsx/controllers/main.py", line 43, in report_routes
    reportname, docids, converter, **data
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 515, in response_wrap
    response = f(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1557, in report_routes
    data.update(json.loads(data.pop('options')))
ValueError: dictionary update sequence element #0 has length 3; 2 is required
Avatar
Discard
Best Answer

Hi, Please try below code to print dictionary values ​​in table rows:

<t t-foreach = "records" t-as = "det">

<t t-foreach = "det" t-as = "l">

<tr style = "border: solid gray 4px">


            <td> <span t-esc = "l_value" /> </td>


        </tr>

</t>

</t>


Regards,




Email:      odoo@aktivsoftware.com  

Skype: kalpeshmaheshwari

   

Avatar
Discard
Best Answer

Hi

If you getting records as list of dictionary on template

then you can use following

<tr t-foreach="records" t-as="det" >                             

     <td><span t-esc="det.get('number')"></td>

     <td><span t-esc="det.get('price_total')"></td>

     <td><span t-esc="det.get('product_id')"></td>    

 </tr> 

Make sure that records is a list and det is a dictionary

you may check it by <span t-esc="type(records)"/>  and  <span t-esc="type(det)"/>
Thanks

Avatar
Discard
Best Answer

<tr t-foreach="records" t-as="det" style="border:solid grey 4px">

                                             

                                                    <td><span t-esc="det.number"></td>

                                                    <td><span t-esc="det.price_total"></td>

                                                    <td><span t-esc="det.product_id"></td>    

                                             

                                    </tr>     

Avatar
Discard