τα στοιχεία επικοινωνίας μου
Ταχυδρομείοmesophia@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Τα πεδία Many2many είναι παρόμοια με τα πεδία Many2one καθώς δημιουργούν νέες σχέσεις μεταξύ μοντέλων.υπάρχειOdoo 16 , δεν μπορείτε να ομαδοποιήσετε κατά many2many πεδία επειδή οποιαδήποτε εγγραφή μπορεί να επιλεγεί χρησιμοποιώντας πολλές εγγραφές many2many. Όταν δίνετε ομάδα ανά φίλτρο χρησιμοποιώντας το πεδίο many2many, θα λάβετε σφάλμα ισχυρισμού.
Παρουσιάζοντας τον τρόπο χρήσης της ομάδας πεδίων Many2Many στο Odoo 16。
Εδώ θα χρησιμοποιήσω το υπάρχον πεδίο tag_ids many2many. Όπως φαίνεται στον παρακάτω κώδικα:
.py
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>
Μπορείτε να χρησιμοποιήσετε το πεδίο Many2many για φιλτράρισμα group_by. Αυτό λειτουργεί αν μετρήσουμε τα πεδία, αλλά αν η τιμή στο πεδίο many2many είναι 2, τότε θα εμφανίζεται με κόμμα (,) όπως tag1, tag2 κ.λπ. επειδή είναι πεδίο χαρακτήρων.
.py
- 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. Όταν προσπαθήσουμε να ομαδοποιήσουμε με βάση αυτές τις παραγγελίες πωλήσεων, θα εμφανιστεί παρακάτω.
Ομοίως, μπορούμε να προσθέσουμε groupby για many2many πεδία.
Στη συνέχεια, ας ελέγξουμε πώς να προσθέσουμε ένα φίλτρο για το πεδίο many2many.
Μπορείτε να δημιουργήσετε ένα εναλλακτικό πεδίο Many2Many για να υπολογίσετε την τιμή από το πεδίο many2many. Θα δώσω ένα παράδειγμα για να το αποδείξω αυτό. Αυτό το πεδίο πρέπει να ορίζει store=True.
.py
- 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