【问题标题】:Filter many2one in one2many based on another many2one in odoo 8根据odoo 8中的另一个many2one过滤one2many中的many2one
【发布时间】:2017-03-17 10:22:56
【问题描述】:

我的问题如下:

我的class Agreement 中有两个 one2many 字段,每个字段都包含一个指向 class Unit 的 many2one 字段。

我希望能够选择agreement_invoice_ids 中的一些单位,agreement_info_ids 中的单位应根据此选择自动过滤。

我尝试在 xml 中使用域,在 python 中设置域,使用 api.onchange 和 api.depends 的不同功能。我希望这实际上是可能的,我只是错过了正确的做法。

我非常愿意接受任何建议。

下面是我的代码的简化版本:

agreement.py

class Agreement(models.Model):
    _name = 'model.agreement'

    agreement_invoice_ids = fields.One2many('model.invoice', 'agreement_id')
    agreement_info_ids = fields.One2many('model.info', 'agreement_id')


class Invoice(models.Model):
    _name = 'model.invoice'

    agreement_id = fields.Many2one('model.agreement')
    unit_id = fields.Many2one('model.unit')


class Info(models.Model):
    _name = 'model.info'

    agreement_id = fields.Many2one('model.agreement')
    unit_id = fields.Many2one('model.unit')

agreement.xml

<?xml version="1.0" encoding="UTF-8"?>
<openerp>
    <data>
        <record model="ir.ui.view" id="agreement_form_view">
            <field name="name">agreement.form</field>
            <field name="model">model.agreement</field>
            <field name="arch" type="xml">
                <form string="Agreement Form">

                    <field name="agreement_invoice_ids">
                        <tree editable="bottom">
                            <field name="unit_id"/>
                        </tree>
                    </field>

                    <field name="agreement_info_ids">
                        <tree editable="bottom">
                            <field name="unit_id"/> <!-- should be filtered based on selection made for unit_id in agreement_invoice_ids -->
                        </tree>
                    </field>

                </form>
            </field>
        </record>
    </data>
</openerp>

【问题讨论】:

    标签: python-2.7 one-to-many odoo-8 many-to-one


    【解决方案1】:

    我想通了。

    只需执行以下操作,您就可以了。

    class Info(models.Model):
        _name = 'model.info'
    
        agreement_id = fields.Many2one('model.agreement')
        unit_id = fields.Many2one('model.unit')
    
        @api.multi
        @api.onchange('unit_id')
        def filter_unit_id(self):
            res = dict()
            unit_ids = self.agreement_id.agreement_invoice_ids.mapped('unit_id.id')
            res['domain'] = {'unit_id': [('id', 'in', unit_ids)]}
            return res
    

    【讨论】:

    • @gve 完美答案,谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多