在多数情况下我们希望在搜索列表中单头与单身都在列表上可以查看到
本系统的开发控件 支持列表与明细表列不相同
主子表格式如下
列表展示如下
搜索格式如下
开发思路
原列表增加define_tree_product_product
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="xodoo_define_tree_product_form_inherit">
<field name="name">product.product.form.inherit</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="cdc.tree_product_product_device"/>
<field name="arch" type="xml">
<xpath expr="//tree" position="attributes">
<attribute name="js_class">define_tree_product_product</attribute>
</xpath>
<xpath expr="//field[@name='categ_id']" position="after">
<field name="product_line_ids" invisible="1" optional="hide"/>
<field name="json_product_line_ids" invisible="1" optional="hide"/>
</xpath>
</field>
</record>
</data>
</odoo>
开发子明细关系定义
json_product_line_ids
json_product_line_ids= fields.Json(string="备件清册", compute="_compute_json_product_line_ids")
def _compute_json_product_line_ids(self):
self.check_access_rights('read')
self.check_access_rule('read')
for record in self:
vess = """
<div name="vessel_ids" class="o_field_widget o_field_many2many_tags"><div class="o_field_tags d-inline-flex flex-wrap gap-1"><span class="o_tag position-relative d-inline-flex align-items-center user-select-none mw-100 o_badge badge rounded-pill lh-1 o_tag_color_0" tabindex="-1" title="创新之路"><div class="o_tag_badge_text text-truncate">创新之路</div></span><span class="o_tag position-relative d-inline-flex align-items-center user-select-none mw-100 o_badge badge rounded-pill lh-1 o_tag_color_0" tabindex="-1" title="发展之路"><div class="o_tag_badge_text text-truncate">发展之路</div></span></div></div>
"""
list =[]
for line in record.product_line_ids:
# tag_ids= ', '.join(map(repr, line.product_id.tag_ids.mapped('name')))
tag_ids = []
for t in line.product_id.tag_ids:
values = {
'id': t.id,
'display_name': t.display_name,
'color': t.color,
}
tag_ids.append(values)
# vessel_ids= ', '.join(map(repr, line.product_id.vessel_ids.mapped('name')))
vessel_ids = []
for t in line.product_id.vessel_ids:
values = {
'id': t.id,
'display_name': t.display_name,
'color': t.color,
}
vessel_ids.append(values)
if line.product_id.image_128:
image_128= '/web/image?model=product.product&id=%s&field=image_128' % line.product_id.id
else:
image_128 = '/web/static/img/placeholder.png'
data = {
'image_128': image_128,
'id': line.id,
'name': line.product_id.name,
'manufacturer_id': line.product_id.manufacturer_id.name or '',
'specification': line.product_id.specification or '',
'vessel_ids': vessel_ids,
'tag_ids': tag_ids,
'description': line.product_id.description or '',
'categ_id': line.product_id.categ_id.name or '',
}
list.append(data)
record.json_product_line_ids = list