如何从方法中打印循环数据
how to print looped data from a method
我创建了一个方法如下:但它只需要最后一个循环数据而不是所有数据到 xml 来生成 pdf,所以需要一种方法来从这个方法循环生成 pdf
def bsku_asin_picking(self):
website = self.env['website'].search([('company_id', '=', self.env.company.id)], limit=1)
# print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%', website.label_type)
# vals = []
for rec in self.move_ids_without_package:
product = self.env['product.product'].browse(rec.product_id.id)
data = {
'quantity': rec.product_uom_qty,
'display_name': product.display_name,
'product': product,
}
if website.label_type == 'bsku':
data['barcode_value'] = product.bsku
else:
data['barcode_value'] = product.asin
# vals.append(data)
return self.env.ref('product_label_bsku_sin.report_product_template_label').report_action(product, data=data)
通过 data
传递的变量将在渲染上下文中可用。
示例:
def bsku_asin_picking(self):
website = self.env['website'].search([('company_id', '=', self.env.company.id)], limit=1)
vals = []
for rec in self.move_ids_without_package:
product = rec.product_id
product_data = {
'quantity': rec.product_uom_qty,
'display_name': product.display_name,
'product': product,
}
if website.label_type == 'bsku':
product_data['barcode_value'] = product.bsku
else:
product_data['barcode_value'] = product.asin
vals.append(product_data)
datas = {'vals': vals}
return self.env.ref('product_label_bsku_sin.action_report_product_template_label').report_action(self, data=datas)
然后你可以循环 vals
并打印产品数据。
示例:
<t t-foreach="vals" t-as="product_data">
<p t-out="product_data['quantity']"/>
<p t-out="product_data['display_name']"/>
<p t-out="product_data['product']"/>
<p t-out="product_data['barcode_value']"/>
</t>
备选
你也可以在没有 data
的情况下调用 report_action
并循环遍历 move_ids_without_package
:
示例:
<t t-set="website_label_type" t-value="doc.env['website'].search([('company_id', '=', doc.env.company.id)], limit=1)"/>
<t t-foreach="doc.move_ids_without_package" t-as="line">
<p t-out="line.product_uom_qty"/>
<p t-out="line.display_name"/>
<p t-out="line.product_id.name"/>
<t t-if="website_label_type == 'bsku'">
<span t-out="line.product_id.bsku"/>
</t>
<t t-else="">
<span t-out="line.product_id.asin"/>
</t>
</t>
我创建了一个方法如下:但它只需要最后一个循环数据而不是所有数据到 xml 来生成 pdf,所以需要一种方法来从这个方法循环生成 pdf
def bsku_asin_picking(self):
website = self.env['website'].search([('company_id', '=', self.env.company.id)], limit=1)
# print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%', website.label_type)
# vals = []
for rec in self.move_ids_without_package:
product = self.env['product.product'].browse(rec.product_id.id)
data = {
'quantity': rec.product_uom_qty,
'display_name': product.display_name,
'product': product,
}
if website.label_type == 'bsku':
data['barcode_value'] = product.bsku
else:
data['barcode_value'] = product.asin
# vals.append(data)
return self.env.ref('product_label_bsku_sin.report_product_template_label').report_action(product, data=data)
通过 data
传递的变量将在渲染上下文中可用。
示例:
def bsku_asin_picking(self):
website = self.env['website'].search([('company_id', '=', self.env.company.id)], limit=1)
vals = []
for rec in self.move_ids_without_package:
product = rec.product_id
product_data = {
'quantity': rec.product_uom_qty,
'display_name': product.display_name,
'product': product,
}
if website.label_type == 'bsku':
product_data['barcode_value'] = product.bsku
else:
product_data['barcode_value'] = product.asin
vals.append(product_data)
datas = {'vals': vals}
return self.env.ref('product_label_bsku_sin.action_report_product_template_label').report_action(self, data=datas)
然后你可以循环 vals
并打印产品数据。
示例:
<t t-foreach="vals" t-as="product_data">
<p t-out="product_data['quantity']"/>
<p t-out="product_data['display_name']"/>
<p t-out="product_data['product']"/>
<p t-out="product_data['barcode_value']"/>
</t>
备选
你也可以在没有 data
的情况下调用 report_action
并循环遍历 move_ids_without_package
:
示例:
<t t-set="website_label_type" t-value="doc.env['website'].search([('company_id', '=', doc.env.company.id)], limit=1)"/>
<t t-foreach="doc.move_ids_without_package" t-as="line">
<p t-out="line.product_uom_qty"/>
<p t-out="line.display_name"/>
<p t-out="line.product_id.name"/>
<t t-if="website_label_type == 'bsku'">
<span t-out="line.product_id.bsku"/>
</t>
<t t-else="">
<span t-out="line.product_id.asin"/>
</t>
</t>