在父视图中通过 'add an item' 调用表单时如何使 Many2One 不可见?

How to make Many2One invisible when the form is called via 'add an item' in the parent view?

我想在 One2many 视图中由 'add an item' 调用时使 many2one 字段不可见,例如:

parent view :
   Name = 'this is One2many field'
   value 1 = 
   value 2 :  add an item

child view :
   Parent Name = 'this is Many2one field'
   value 1 = ....

当我点击 'add an item' 时,我希望获得以下视图:

child view :
   value 1 = ...

我尝试在子视图中设置 attrs="{'invisible':[('parent_id', '!=', False)]}" 但这总是正确的,因为尚未创建父字段。有什么想法吗?

您可以通过在父表单视图的one2many字段中设置上下文来实现。

我会举例说明。 placement_line是父视图one2many字段。在那个设置上下文中,如下代码。

<field name="placement_line" context="{'one2many':True}" /> 

这里,student_id是manyone子窗体视图字段。请看下面的代码。

<field name="student_id" invisible="context.get('one2many')"/>

通过在您的父表单和子表单中设置上述代码,您可以在 One2many 视图中从 'add an item' 打开子表单时隐藏子字段 (many2one)。

通过为 one2many 字段定义内联表单视图,有一种非常简单的方法可以实现这一点。

这里有一个例子供大家参考。

<field name="one2many_field_name">
    <tree>
        <field name="field1" />
        <field name="field2"  />
        <field name="field3"  />
    </tree>
    <form>
        <field name="field1" invisible="1" />
        <field name="field2"  />
        <field name="field3"  />
    </form>
</field>

当您单击 "Add an item" 时,它将呈现内联定义的表单视图,如果没有定义内联视图,那么它将采用您在外部创建的表单视图。

因此,您可以通过这种方式为 many2many / one2many 字段定义内联视图,通过这种方式您可以直接定义任何字段的行为。