我有一个 many2many table,但我需要提供域,因为只有合作伙伴在模型中的记录需要显示在 many2many table
i have a many2many table,But i need to give domain as only the partner's record in the model needs to be shown in the many2many table
class HealthProfileInherit(models.Model):
_inherit = 'health.profile'
health_profile_health_test_id = fields.Many2many('health.test',
string ='Laboratory Test')
这是连接2个表的域,这里怎么给域?我想写一个函数还是可以在字段内给出域?
以下域:
domain="[('partner_id', '=', partner_id)]"
将在您单击 add item
按钮后过滤弹出列表中显示的记录 link。仅显示具有个人资料合作伙伴的测试记录。
String domains are supposed to be dynamic and evaluated on the client-side only.
默认情况下,用户可以从弹出列表中创建记录,并且他们可以 select partner_id
字段中的任何合作伙伴。
如果您想从弹出列表中禁用创建选项,请使用 no_create
选项:
options="{'no_create': True}"
如果你想保留创建按钮并强制用户 select 配置文件合作伙伴,你可以为 health.test
模型创建一个新表单并将合作伙伴字段设置为不可见,然后传递默认值上下文中的合作伙伴值并强制 many2many 字段使用该形式。
<field name="health_profile_health_test_id"
domain="[('partner_id', '=', partner_id)]"
context="{'form_view_ref': 'module_name.health_test_form', 'default_partner_id': partner_id}"/>
请记住,优先级最低的表单视图将用作默认表单视图(默认优先级值为16
):
示例:
<record id="health_test_form" model="ir.ui.view">
<field name="name">health.test Form</field>
<field name="model">health.test</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<form>
<group>
<field name="partner_id" invisible="True"/>
....
</group>
....
</form>
</field>
</record>
编辑:
字符串域是动态的并在客户端进行评估,例如 "[('partner_id', '=', partner_id)]"
字符串域将被评估为 [('partner_id', '=', 26)]
并且如果列表已经有 selected 记录,则将使用 ['!', ['id', 'in', list_of_ids]]
.
排除记录
但是当将域作为带有 many2one 字段引用的列表传递时,该值将是 Many2one
类型并且服务器在尝试获取字段属性时应该引发 RecursionError
(在v12, v13).
如果您查看 Odoo 源代码,您会发现许多使用列表域但具有布尔值、字符串等简单值的示例
class HealthProfileInherit(models.Model):
_inherit = 'health.profile'
health_profile_health_test_id = fields.Many2many('health.test',
string ='Laboratory Test')
这是连接2个表的域,这里怎么给域?我想写一个函数还是可以在字段内给出域?
以下域:
domain="[('partner_id', '=', partner_id)]"
将在您单击 add item
按钮后过滤弹出列表中显示的记录 link。仅显示具有个人资料合作伙伴的测试记录。
String domains are supposed to be dynamic and evaluated on the client-side only.
默认情况下,用户可以从弹出列表中创建记录,并且他们可以 select partner_id
字段中的任何合作伙伴。
如果您想从弹出列表中禁用创建选项,请使用 no_create
选项:
options="{'no_create': True}"
如果你想保留创建按钮并强制用户 select 配置文件合作伙伴,你可以为 health.test
模型创建一个新表单并将合作伙伴字段设置为不可见,然后传递默认值上下文中的合作伙伴值并强制 many2many 字段使用该形式。
<field name="health_profile_health_test_id"
domain="[('partner_id', '=', partner_id)]"
context="{'form_view_ref': 'module_name.health_test_form', 'default_partner_id': partner_id}"/>
请记住,优先级最低的表单视图将用作默认表单视图(默认优先级值为16
):
示例:
<record id="health_test_form" model="ir.ui.view">
<field name="name">health.test Form</field>
<field name="model">health.test</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<form>
<group>
<field name="partner_id" invisible="True"/>
....
</group>
....
</form>
</field>
</record>
编辑:
字符串域是动态的并在客户端进行评估,例如 "[('partner_id', '=', partner_id)]"
字符串域将被评估为 [('partner_id', '=', 26)]
并且如果列表已经有 selected 记录,则将使用 ['!', ['id', 'in', list_of_ids]]
.
但是当将域作为带有 many2one 字段引用的列表传递时,该值将是 Many2one
类型并且服务器在尝试获取字段属性时应该引发 RecursionError
(在v12, v13).
如果您查看 Odoo 源代码,您会发现许多使用列表域但具有布尔值、字符串等简单值的示例