2016-05-16 38 views
1

我想在我的QWeb中使用元素「item」。我應該在報告中寫什麼? 「item」是tabData中的一個屬性。你可以在下面看到我的python代碼。 我已經配置了報表解析器,它的工作原理。如何在我的QWeb報告中使用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 

謝謝您的幫助。

回答

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> 

聽鍵1,鍵2,...等等自帶基於字典的關鍵你的方法名單上,該值自動打印按你設置在你的.py端

我希望我的回答可能對你有所幫助:)