我有一个 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 源代码,您会发现许多使用列表域但具有布尔值、字符串等简单值的示例