【问题标题】:Odoo 11: Domain on many2many field not workingOdoo 11:many2many 域上的域不起作用
【发布时间】:2018-10-26 00:20:05
【问题描述】:
<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)

【问题讨论】:

    标签: odoo-11


    【解决方案1】:

    您不能在action_purchase_orders 视图操作中执行此操作,您不能在域元组右侧使用字段,因为将没有上下文来提供该值。要完成它,您需要将按钮更改为 object 类型,并使用关联的 python 方法返回具有所需域值的操作 dict 评估,因此域仅包含其右侧元组的值。 Like(查看按钮的新类型和名称):

    <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(),
        }
    

    【讨论】:

      【解决方案2】:

      添加与 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>
      

      【讨论】:

      • 这并没有解决问题。我仍然收到“purchase_order_ids”未定义
      • 将 purchase_order_ids 更改为 purchase_form_ids
      • 现在错误提示 - purchase_form_ids 未定义。这是怎么回事
      • 您必须指定 purchase.order 和 purchase.form 之间的关系。只需实现我的代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多