我正在使用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"]]
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")
答案 0 :(得分:0)
如果在parent_mcu_data_id
模型中声明mcu.record
字段,@ CZoellner的答案是正确的。但如果它位于关系字段mcu_data_ids
指向的模型中,请执行以下操作:
将字段parent_mcu_data_id
添加到树状视图中,否则domain
和context
的{{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。