树的默认值

时间:2018-04-20 12:33:26

标签: python python-2.7 odoo-8 odoo

我正在使用Odoo v8。目前我创建了一个带有树的弹出窗口(do_action函数)。

这是观点。

    <record id="view_mcu_record_popup_form" model="ir.ui.view">
        <field name="name">mcu.record.popup.form</field>
        <field name="model">mcu.record</field>
        <field name="context">{'default_parent_mcu_data_id': 479}</field>
        <field name="arch" type="xml">
            <form>
                <sheet>
                    <group>
                        <field name="name" readonly="1" />
                    </group>
                    <field name="mcu_data_ids" domain="[('parent_mcu_data_id', '=', 479)]" context="[('default_parent_mcu_data_id', '=', 479)]" widget="one2many_list">
                        <tree editable="bottom" create="true" delete="true">
                            <field name="name" />
                            <field name="val_alphabet" />
                            <field name="val_float" />
                            <field name="val_yesno" />
                            <field name="ref_range" />
                            <field name="unit" />
                            <field name="highlight" />
                            <field name="note" />
                        </tree>
                    </field>
                </sheet>
                <footer>
                    <button name="save_data" string="Save" type="object" class="oe_highlight" />
                    or
                    <button string="Cancel" class="oe_link" special="cancel" />
                </footer>
            </form>
        </field>
    </record>

我想给一个字段赋予默认值,你可以看到我把

<field name="context">{'default_parent_mcu_data_id': 479}</field>

<field name="mcu_data_ids" domain="[('parent_mcu_data_id', '=', 479)]" context="[('default_parent_mcu_data_id', '=', 479)]" widget="one2many_list">

这两行什么也没做。新行parent_mcu_data_id仍为空。

如何从视图中提供默认值(请不要从模型中提供)。

这里我把我给do_action函数的变量

        var new_tree_action = {
            type: "ir.actions.act_window",
            name: act_title,
            res_model: "mcu.record",
            res_id: this.field_manager.datarecord.id,
            view_mode: "form",
            view_type: "form",
            views: [[false, "form"]],
            target: "new",
            context: {
                "default_patient_mcu_id": this.field_manager.datarecord.id,
                "default_parent_mcu_data_id": 479,
                "context_id": context_id,
                "context_parent_id": context_parent_id,
                "variety": context_variety,
                "ref_range": context_ref_range,
                "note": context_note,
                "highlight": context_highlight,
                "unit": context_unit,
                "res_id": context_res_id,
            },
        }

我稍后使用[[false, "form"]]

填充了视图ID ir_model_data.call("get_object_reference", ["medical_checkup", view_id]).then(function(results) {

为了提供更多信息,我决定提供一个模型的提示

class McuRecordInherit(models.Model):
    _auto = True
    _inherit = "mcu.record"
    _description ="Medical Checkup Record"

    mcu_data_ids = fields.One2many("mcu.data", "patient_mcu_id", string="Medical Checkup Data")

3 个答案:

答案 0 :(得分:0)

如果在parent_mcu_data_id模型中声明mcu.record字段,@ CZoellner的答案是正确的。但如果它位于关系字段mcu_data_ids指向的模型中,请执行以下操作:

将字段parent_mcu_data_id添加到树状视图中,否则domaincontext的{​​{1}}密钥将无效:

default_

然后删除您在上面写的字段<field name="mcu_data_ids" domain="[('parent_mcu_data_id', '=', 479)]" context="[('default_parent_mcu_data_id', '=', 479)]" widget="one2many_list"> <tree editable="bottom" create="true" delete="true"> <field name="name" /> <field name="val_alphabet" /> <field name="val_float" /> <field name="val_yesno" /> <field name="ref_range" /> <field name="unit" /> <field name="highlight" /> <field name="note" /> <field name="parent_mcu_data_id" /> </tree> </field> context标记的子字段)。它在record中没有任何作用。

答案 1 :(得分:0)

您必须更新不在视图中的操作的上下文。在渲染视图时,已经评估了默认值。

如果您从另一个视图的按钮打开表单视图,请更新其上下文:

<button name="do_action" string="Action"
    context="{'default_field_another_model': 'default'}" />

答案 2 :(得分:0)

好吧我认为@forvas的答案是正确的我不知道它不起作用。 如果没有先前的答案工作,请尝试至少确保上下文 拥有默认值。你应该将parent_mcu_data_id放在树视图和表单视图中 不只是树视图:

  # try onchange event and force the value in the python code
  @api.onchage('parent_mcu_data_id')
  def force_default_id(self):
      """ check if there is a default value in the context. put it"""
      rec_id = self.env.context.get('default_parent_mcu_data_id', False)
      if not rec_id:
        # here the problem is in your code the context don't have the default value
        pass # you should check why
      else:
        if not self.parent_mcu_data_id:
            # just set default when it's empty
            self.parent_mcu_data_id = rec_id

注意:您知道默认只能在创建模式下工作,而不是在更新模式下。我的意思是说 当您创建新记录时,将设置默认值,但是当您编辑记录时 默认不是trigerred。