Odoo 11:many2many 域上的域不起作用

Odoo 11: Domain on many2many field not working

<record model="ir.actions.act_window" id="action_purchase_orders">
    <field name="name">Purchase Orders</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">purchase.order</field>
    <field name="view_type">form</field>
    <field name="view_mode">tree,form</field>
    <field name="domain">[('id', 'in', purchase_order_ids.ids)]</field> <------- This is not working.
</record>


<record id="purchase.form" model="ir.ui.view">
    <field name="name">purchase.form</field>
    <field name="model">purchase.form</field>
    <field name="arch" type="xml">
        <form string="Purchase Form">                
            <sheet>                    
                <div class="oe_button_box" name="button_box">
                    <button type="action" name="%(action_purchase_orders)d" class="oe_stat_button" icon="fa-list-alt"
                            attrs="{'invisible':[('purchase_order_count', '=', 0)]}">
                        <field name="purchase_order_count" invisible="1"/>
                        <field name="purchase_order_ids" string="Purchase Orders" widget="statinfo" help="Purchase orders"/>
                    </button>
...

class PurchaseForm(models.Model):
    _name = 'purchase.form'

    @api.depends('purchase_order_ids')
    def _purchase_order_count(self):
       for pp in self:
           pp.purchase_order_count = len(pp.purchase_order_ids)

    purchase_order_ids = fields.Many2many('purchase.order', 'purchase_form_purchase_order_rel', 'purchase_form_id', 'purchase_order_id', 'Purchase Orders', states=READONLY_STATES)
    purchase_order_count = fields.Integer(compute='_purchase_order_count', string='# of Purchase Orders')

Error:

Uncaught Error: NameError: name 'purchase_order_ids' is not defined
http://localhost:8069/web/content/801-4161526/web.assets_backend.js:144
Traceback:
Error: NameError: name 'purchase_order_ids' is not defined
    at PY_ensurepy (http://localhost:8069/web/content/801-4161526/web.assets_backend.js:144:65)
    at Object.py.evaluate (http://localhost:8069/web/content/801-4161526/web.assets_backend.js:259:8)
    at Object.py.evaluate (http://localhost:8069/web/content/801-4161526/web.assets_backend.js:267:99)
    at Object.py.evaluate (http://localhost:8069/web/content/801-4161526/web.assets_backend.js:268:194)
    at Object.py.eval (http://localhost:8069/web/content/801-4161526/web.assets_backend.js:272:284)
    at http://localhost:8069/web/content/801-4161526/web.assets_backend.js:377:110
    at iterator (http://localhost:8069/web/content/800-e6de2a4/web.assets_common.js:14:183)
    at Function.<anonymous> (http://localhost:8069/web/content/800-e6de2a4/web.assets_common.js:17:8)
    at _.(anonymous function) [as reduce] (http://localhost:8069/web/content/800-e6de2a4/web.assets_common.js:69:526)
    at eval_contexts (http://localhost:8069/web/content/801-4161526/web.assets_backend.js:375:136)

添加与 purchase.order

的关系
class PurchaseOrder(models.Model):
_inherit = 'purchase.order'

   purchase_form_ids = fields.Many2many('purchase.form', 'purchase_form_purchase_order_rel', 'purchase_order_id', 'purchase_form_id', 'Purchase Orders')

并将操作视图更改为

<record model="ir.actions.act_window" id="action_purchase_orders">
    <field name="name">Purchase Orders</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">purchase.order</field>
    <field name="view_type">form</field>
    <field name="view_mode">tree,form</field>
    <field name="domain">[('id', 'in', purchase_form_ids.ids)]</field> 
</record>

您不能在 action_purchase_orders 查看操作中这样做,您不能在域元组的右侧使用字段,因为没有上下文可以提供该值。要完成它,您需要将按钮更改为对象类型,并使用 python 方法关联 return 具有评估的所需域值的操作字典,以便域仅包含其右侧的值元组。喜欢(查看按钮的新类型和名称):

<button type="object" name="action_purchase_orders" class="oe_stat_button" icon="fa-list-alt" attrs="{'invisible':[('purchase_order_count', '=', 0)]}">
    <field name="purchase_order_count" invisible="1"/>
    <field name="purchase_order_ids" string="Purchase Orders" widget="statinfo" help="Purchase orders"/>
</button>

在您的 purchase.form 模型中定义方法 action_purchase_orders,例如:

@api.multi
def action_purchase_orders(self):
    self.ensure_one()
    return {
        'name': _('Purchase Orders'),
        'type': 'ir.actions.act_window',
        'view_type': 'form',
        'view_mode': 'form',
        'res_model': 'purchase.order',
        'target': 'new',
        'domain': [('id', 'in', self.purchase_order_ids.ids)]
        'context': self.env.context.copy(),
    }