动态域在odoo9中无法正常工作

时间:2018-07-16 20:43:29

标签: python dynamic dns onchange odoo

在Odoo9中,我需要一个动态域,该域取决于向导上的many2one字段。 通过使用各种示例,我使它起作用,但是过滤后的值始终对先前的选项有效。或者,如果我从过滤的域中选择一个(无效)选项,它们将是有效的。

详细信息:

在机会工作流程结束时,推销员应在其选择成功概率的地方评估机会。在特殊向导中有几个级别可供选择(“ 100%确定”,“不确定”,“也许”等)。我为此使用了fields.Selection。然后,我介绍了一种新的机会类型(保留),其中只有100%和0%应该可用。因此,我创建了一个新模型evaluation_option,将fields.Selection替换为fields.Many2one,然后从这些值中过滤出允许的选项(使用retention=True)。

这是我的向导模型:

class evaluation_wizard(models.TransientModel):
    _name = 'evaluation.wizard'
    _description = 'Wizard to evaluate opportunity'

    lead_id = fields.Many2one('crm.lead')
    evaluation_option_id = fields.Many2one('evaluation.option')

    def get_object(self, model, fieldname):
        ids = self._context.get(fieldname)
        if ids is None:
            ids = self._context.get('default_' + fieldname)
        return self.env[model].browse(ids)

    @api.onchange('lead_id')
    def _onchange_lead_id(self):
        # I check the context to get lead_id
        lead_id = self.lead_id if self else self.get_object('crm.lead', 'lead_id')
        dom = [('retention', '=', True)] if lead_id.retention else []
        return {'domain': {'evaluation_option_id': dom}}

这是实际的向导

    <record id="evaluation_wizard_view" model="ir.ui.view">
        <field name="name">evaluation.wizard.view</field>
        <field name="model">evaluation.wizard</field>
        <field name="arch" type="xml">
            <form string="Evaluate opportunity">
                <sheet class="row">
                    <group>
                        <group>
                            <field name="lead_id" invisible="False"/>
                            <field name="evaluation_option_id" required="True"
                                   create="False" edit="False" widget="radio"
                            />
                        </group>
                    </group>
                    <footer>
                        <button name="evaluate"
                                type="object"
                                string="Confirm"
                                class="oe_highlight"
                                context="{'lead_id': default_lead_id,
                                          'active_id': default_lead_id,
                                          'evaluation_option_id': evaluation_option_id}"/>
                    </footer>
                </sheet>
            </form>
        </field>
    </record>

我制作了一种用于域动态更改的onchange方法,如上所示。我也尝试过这样计算域:evaluation_option_id = fields.Many2one('evaluation.option', domain=_compute_domain),其中compute_domain与onchange相同,但以api.depends装饰。没有一种方法能按预期工作。

我使用瞬态模型,其值(例如lead_id)通过按钮上的上下文预先填充了默认值(default_lead_id)。

无论我尝试什么,当我使域实际工作时,它都会过滤出值,但始终对先前的选择有效。这意味着如果我选择保留机会,我将获得所有选择,如果我选择正常机会,我将获得保留选项。如果下一个是常规机会,则选项是正确的。但是,如果我选择保留机会(并显示无效选项),然后选择无效选项,则无效选项会突然被滤除。我不确定,但是在我看来,这里也提到了同样的问题:domain filter for many2one fields in odoo?在接受答案的最后一条评论中。

您能看到一个明显的错误吗?或者您知道另一种动态更改域的方法吗?

0 个答案:

没有答案