Как использовать функцию python в моем отчете QWeb?

Я хотел бы использовать в своем отчете QWeb элемент «элемент». Что я должен написать в отчете? «Элемент» — это атрибут в tabData. Вы можете увидеть мой код Python ниже. Я уже настроил анализатор отчетов, и он работает.

Это мой код Python:

def getLines (self, objects):

            tabData = []
            print objects
            for i in range (7):
                tabData.append({})
                tabData [i] ['jour']      = self.tabJour [i]
                tabData [i] ['commandes'] = {}

            for o in objects:
                indJour = int(o.jour) - 1

                if indJour not in range(7): continue

                commande = o.order_id.name

                if not (tabData [indJour]['commandes'].has_key (commande)):
                    tabData [indJour]['commandes'][commande] = {}
                    tabData [indJour]['commandes'][commande]['items'] = []
                    tabData [indJour]['commandes'][commande]['partner'] = o.order_partner_id.name




                bois    = o.bois1.code_fini
                bois2   = o.bois2.code_fini
                metal   = o.metal.code_fini
                tissus  = o.tissu.code_fini
                poignee = o.poignee.code_fini
                patte   = o.patte.code_fini
                cfg     = o.config


                optionTissu = o.tissu.couleur_finifr

                qty           = int(o.product_uom_qty)
                qtyEmballe    =  0
                qtyPeinture   = qty - qtyEmballe - int(o.FabPeint)
                qtyTeinture   = qty - qtyEmballe - int(o.FabTeint)
                qtyRembourage = qty - qtyEmballe - int(o.ProdFTissus)
                qtyMetal      = qtyPeinture - int(o.ProdFMetal)
                qtyBois       = qtyTeinture - int(o.ProdFBois)

                if not (qtyMetal) or qtyMetal < 0:
                    qtyMetal = 0
                if not (qtyBois) or qtyBois < 0:
                    qtyBois = 0
                if not (qtyPeinture) or qtyPeinture < 0:
                    qtyPeinture = 0
                if not (qtyTeinture) or qtyTeinture < 0:
                    qtyTeinture = 0
                if not (qtyRembourage) or qtyRembourage < 0:
                    qtyRembourage = 0

                if bois == '.':
                    bois = None
                if bois2 == '.':
                    bois2 = None
                if metal == '.':
                    metal = None
                if tissus == '.':
                    tissus = None
                if poignee == '.':
                    poignee = None
                if patte == '.':
                    patte = None
                if cfg == '.':
                    cfg = None

                if optionTissu == "NONE":
                    optionTissu=None

                tabData [indJour]['commandes'][commande]['items'].append ({
                        'item': o.product_id.default_code,
                        'qty': qty,
                        'metal': metal,
                        'bois': bois,
                        'bois2': bois2,
                        'tissus': tissus,
                        'poignee': poignee,
                        'patte': patte,
                        'optionTissu': optionTissu,
                        'cfg': cfg,
                        'notes': o.notes,
                        'qtyEmballe': qtyEmballe,
                        'qtyMetal': qtyMetal,
                        'qtyBois': qtyBois,
                        'qtyPeinture': qtyPeinture,
                        'qtyTeinture': qtyTeinture,
                        'qtyRembourage': qtyRembourage,
                    })
            print "FIN"
            return tabData

Спасибо за помощь.


person Gary Heldmann    schedule 16.05.2016    source источник


Ответы (1)


Просто нужно повторить свой список словаря python, используя следующий способ:

Ваш метод getLines() возвращается в виде списка словаря, после чего вы можете просто напрямую вызвать этот метод в шаблоне Qweb, что-то вроде этого.

вы просто вызываете этот метод в атрибуте t-foreach

<t t-foreach="getLines(o)" t-as="line">
      <tr>
         <td><span t-esc="line.get('key1')"/>
         </td>
         <td>
            <span t-esc="line.get('key2')"/>
         </td>
      </tr>
 </t>

Услышьте key1, key2, .. так далее на основе вашего списка методов ключа словаря, и это значение автоматически печатается в соответствии с вами, установленным на вашей стороне .py

Я надеюсь, что мой ответ может быть полезен для вас :)

person DASADIYA CHAITANYA    schedule 27.05.2016