如何在我的 QWeb 报告中使用 python 函数?
How to use python function in my QWeb report?
我想在我的 QWeb 报告中使用元素 "item"。我应该在报告中写什么?
"item" 是 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
感谢您的帮助。
只需要使用以下方式迭代 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 端设置的内容自动打印
希望我的回答对您有所帮助:)
我想在我的 QWeb 报告中使用元素 "item"。我应该在报告中写什么? "item" 是 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
感谢您的帮助。
只需要使用以下方式迭代 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 端设置的内容自动打印
希望我的回答对您有所帮助:)