2016-05-16 4 views
1

Я хотел бы использовать в своем QWeb-отчете элемент «item». Что я должен написать в своем отчете? «item» - это атрибут в tabData. Вы можете увидеть мой код python ниже. Я уже сконфигурировал анализатор отчетов, и он работает.Как использовать функцию python в моем отчете QWeb?

Это мой питон код:

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

Просто нужно итерацию ваш список словаря питона используя Ниже Путь:

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

вы только непосредственно вызвать этот метод в т-Еогеасп атрибут

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

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

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

Смежные вопросы