Berbagi teknologi

Cara menggunakan Group by untuk bidang Many2Many di Odoo 16

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Bidang Many2many mirip dengan bidang Many2one karena bidang tersebut membangun hubungan baru antar model.adaBahasa Indonesia: Bahasa Indonesia: Odoo 16 , Anda tidak dapat mengelompokkan berdasarkan many2many bidang karena rekaman apa pun dapat dipilih menggunakan many2many rekaman. Saat Anda mengelompokkan berdasarkan filter menggunakan bidang many2many, Anda akan mendapatkan kesalahan pernyataan.

Memperkenalkan cara menggunakan grup bidang Many2Many di Odoo 16。 

Disini saya akan menggunakan field tag_ids many2many yang ada. Seperti yang ditunjukkan pada kode berikut:

Bahasa Indonesia: .py

tag_ids = fields.Many2many('crm.tag', 'sale_order_tag_rel', 'order_id', 'tag_id', string='Tags')

Bahasa Inggris: .xml

  1. <record id="view_sales_order_filter" model="ir.ui.view">
  2. <field name="name">sale.order.view.list.inherit.module.name</field>
  3. <field name="model">sale.order</field>
  4. <field name="inherit_id" ref="sale.view_sales_order_filter"/>
  5. <field name="arch" type="xml">
  6. <xpath expr="//search/group/filter[@name='customer']" position="after">
  7. <separator/>
  8. <filter name="tag_ids" string="Tags" domain="[]" context="{'group_by': 'tag_ids'}"/>
  9. <separator/>
  10. </xpath>
  11. </field>
  12. </record>

Anda dapat menggunakan bidang Many2many untuk pemfilteran group_by. Ini berfungsi jika kita menghitung field, tetapi jika nilai pada field many2many adalah 2, maka akan ditampilkan dengan koma (,) seperti tag1, tag2, dll karena merupakan field karakter.

Bahasa Indonesia: Bahasa Indonesia: .py

  1. product_tags = fields.Char(string='Tags', compute='_get_tags', store=True)
  2. @api.model
  3. @api.depends('tag_ids')
  4. def _get_tags(self):
  5. for rec in self:
  6. if rec.tag_ids:
  7. product_tags = ','.join([p.name for p in rec.tag_ids])
  8. else:
  9. product_tags = ''
  10. rec.product_tags = product_tags

Bahasa Inggris: .xml

  1. <record id="view_sales_order_filter" model="ir.ui.view">
  2. <field name="name">sale.order.view.list.inherit.module.name</field>
  3. <field name="model">sale.order</field>
  4. <field name="inherit_id" ref="sale.view_sales_order_filter"/>
  5. <field name="arch" type="xml">
  6. <xpath expr="//search/group/filter[@name='customer']"
  7. position="after">
  8. <separator/>
  9. <filter name="tag_ids" string="Tags" domain="[]"
  10. context="{'group_by': 'product_tags'}"/>
  11. <separator/>
  12. </xpath>
  13. </field>
  14. </record>
  1. <record id="sale_view_form_custom" model="ir.ui.view">
  2. <field name="name">ale.order.view.form.inherit.module.name</field>
  3. <field name="model">sale.order</field>
  4. <field name="inherit_id" ref="sale.view_order_form"/>
  5. <field name="arch" type="xml">
  6. <xpath expr="//field[@name='payment_term_id']" position="after">
  7. <field name="product_tags"/>
  8. </xpath>
  9. </field>
  10. </record>

Di sini kami telah menambahkan bidang Char product_tags. Ini adalah bidang kalkulasi tempat nama label digabungkan.

Anda dapat melihat bahwa kami telah menyediakan filter pengelompokan yang disebut tag dalam file XML. Saat kami mencoba mengelompokkan berdasarkan pesanan penjualan ini, maka akan muncul di bawah.

Demikian pula, kita dapat menambahkan groupby untuk bidang many2many.

Selanjutnya, mari kita periksa cara menambahkan filter untuk bidang many2many.

Anda dapat membuat bidang Many2Many alternatif untuk menghitung nilai dari bidang many2many. Saya akan memberikan contoh untuk menunjukkan hal ini. Bidang ini harus menentukan store=True.

Bahasa Indonesia: Bahasa Indonesia: .py

  1. newfield_id = fields.Many2one('example_ids', compute=_compute_newfield_id, store=True)
  2. @api.depends('example_ids')
  3. def _compute_newfield_id(self):
  4. for record in self:
  5. record.newfield_id = record.example_ids and record.example_ids[0] or False

Bahasa Inggris: .xml

<field name="newfield_id" string="Example" filter_domain="[(newfield_id,'ilike', self)]"/>

Anda dapat memberikan nama domain jika diperlukan karena dapat dengan mudah dicari di kolom yang disimpan. Anda dapat memasukkan xpath lokasi jika Anda mau.

Untuk mengetahui lebih banyak tentang membuat bidang banyak ke banyak di formulir portal pelanggan di Odoo 16