내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Many2many 필드는 모델 간에 새로운 관계를 설정한다는 점에서 Many2one 필드와 유사합니다.존재하다오두 16 , Many2many 레코드를 사용하여 모든 레코드를 선택할 수 있으므로 Many2many 필드별로 그룹화할 수 없습니다. Many2many 필드를 사용하여 필터별로 그룹을 지정하면 어설션 오류가 발생합니다.
Odoo 16에서 Many2Many 필드 그룹을 사용하는 방법 소개。
여기서는 기존 tag_ids Many2many 필드를 사용하겠습니다. 다음 코드에 표시된 대로:
.파이
tag_ids = fields.Many2many('crm.tag', 'sale_order_tag_rel', 'order_id', 'tag_id', string='Tags')
.xml
- <record id="view_sales_order_filter" model="ir.ui.view">
- <field name="name">sale.order.view.list.inherit.module.name</field>
- <field name="model">sale.order</field>
- <field name="inherit_id" ref="sale.view_sales_order_filter"/>
- <field name="arch" type="xml">
- <xpath expr="//search/group/filter[@name='customer']" position="after">
- <separator/>
- <filter name="tag_ids" string="Tags" domain="[]" context="{'group_by': 'tag_ids'}"/>
- <separator/>
- </xpath>
- </field>
- </record>
group_by 필터링에 Many2many 필드를 사용할 수 있습니다. 필드 수를 세는 경우에는 작동하지만, Many2many 필드의 값이 2인 경우 문자 필드이므로 tag1, tag2 등과 같이 쉼표(,)로 표시됩니다.
.파이
- product_tags = fields.Char(string='Tags', compute='_get_tags', store=True)
- @api.model
- @api.depends('tag_ids')
- def _get_tags(self):
- for rec in self:
- if rec.tag_ids:
- product_tags = ','.join([p.name for p in rec.tag_ids])
- else:
- product_tags = ''
- rec.product_tags = product_tags
.xml
- <record id="view_sales_order_filter" model="ir.ui.view">
- <field name="name">sale.order.view.list.inherit.module.name</field>
- <field name="model">sale.order</field>
- <field name="inherit_id" ref="sale.view_sales_order_filter"/>
- <field name="arch" type="xml">
- <xpath expr="//search/group/filter[@name='customer']"
- position="after">
- <separator/>
- <filter name="tag_ids" string="Tags" domain="[]"
- context="{'group_by': 'product_tags'}"/>
- <separator/>
- </xpath>
- </field>
- </record>
- <record id="sale_view_form_custom" model="ir.ui.view">
- <field name="name">ale.order.view.form.inherit.module.name</field>
- <field name="model">sale.order</field>
- <field name="inherit_id" ref="sale.view_order_form"/>
- <field name="arch" type="xml">
- <xpath expr="//field[@name='payment_term_id']" position="after">
- <field name="product_tags"/>
- </xpath>
- </field>
- </record>
여기에 Char 필드 product_tags를 추가했습니다. 라벨 이름이 연결되는 계산된 필드입니다.
XML 파일에 태그라는 그룹화 필터가 제공되었음을 알 수 있습니다. 이러한 판매 주문별로 그룹화하려고 하면 아래에 표시됩니다.
마찬가지로 Many2many 필드에 대해 groupby를 추가할 수 있습니다.
다음으로 Many2many 필드에 필터를 추가하는 방법을 확인해 보겠습니다.
대체 Many2Many 필드를 만들어 Many2many 필드의 값을 계산할 수 있습니다. 이를 설명하기 위해 예를 제공하겠습니다. 이 필드는 store=True를 지정해야 합니다.
.파이
- newfield_id = fields.Many2one('example_ids', compute=_compute_newfield_id, store=True)
- @api.depends('example_ids')
- def _compute_newfield_id(self):
- for record in self:
- record.newfield_id = record.example_ids and record.example_ids[0] or False
.xml
<field name="newfield_id" string="Example" filter_domain="[(newfield_id,'ilike', self)]"/>
저장된 필드에서 쉽게 검색할 수 있으므로 필요한 경우 도메인 이름을 제공할 수 있습니다. 원하는 경우 위치의 xpath를 포함할 수 있습니다.
Odoo 16의 고객 포털 양식에서 다대다 필드를 생성하는 방법에 대해 자세히 알아 보려면