Technologieaustausch

So verwenden Sie das Feld „Gruppieren nach“ für das Feld „Many2Many“ in Odoo 16

2024-07-12

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

Many2many-Felder ähneln Many2one-Feldern darin, dass sie neue Beziehungen zwischen Modellen herstellen.existierenOdoo 16 , können Sie nicht nach „many2many“-Feldern gruppieren, da jeder Datensatz mithilfe von „many2many“-Datensätzen ausgewählt werden kann. Wenn Sie mithilfe des Felds „Many2Many“ eine Gruppierung nach Filter vornehmen, wird ein Assertionsfehler angezeigt.

Einführung in die Verwendung der Many2Many-Feldgruppe in Odoo 16。 

Hier verwende ich das vorhandene tag_ids-Feld Many2many. Wie im folgenden Code gezeigt:

.py

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

.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>

Sie können das Feld „Many2many“ für die Filterung „group_by“ verwenden. Dies funktioniert, wenn wir die Felder zählen, aber wenn der Wert im Feld „many2many“ 2 ist, wird es mit Komma (,) wie tag1, tag2 usw. angezeigt, da es sich um ein Zeichenfeld handelt.

.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

.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>

Hier haben wir ein Char-Feld „product_tags“ hinzugefügt. Es handelt sich um ein berechnetes Feld, mit dem der Labelname verkettet wird.

Sie können sehen, dass wir in der XML-Datei einen Gruppierungsfilter namens Tag bereitgestellt haben. Wenn wir versuchen, nach diesen Kundenaufträgen zu gruppieren, wird es unten angezeigt.

Ebenso können wir Groupby für Many2Many-Felder hinzufügen.

Sehen wir uns als Nächstes an, wie man einen Filter für das Feld „many2many“ hinzufügt.

Sie können ein alternatives Many2Many-Feld erstellen, um den Wert aus dem Many2Many-Feld zu berechnen. Ich werde ein Beispiel geben, um dies zu demonstrieren. In diesem Feld muss „store=True“ angegeben werden.

.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

.xml

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

Bei Bedarf können Sie den Domainnamen angeben, da er in den gespeicherten Feldern leicht gesucht werden kann. Wenn Sie möchten, können Sie den XPath des Standorts angeben.

Erfahren Sie mehr über das Erstellen von Many-to-Many-Feldern in Kundenportalformularen in Odoo 16