在 Odoo 中禁用更新过滤器
Disable updating filter in Odoo
我已经创建了一个搜索视图并在其中定义了我的过滤器:
<record id="dept_search_view" model="ir.ui.view">
<field name="name">employee.search.view</field>
<field name="model">employee</field>
<field name="arch" type="xml">
<search string="dept_search">
<filter string="Department" name="dept_search" domain="[('e_dept', 'in', ['HR','Audit'])]">
</filter>
</search>
</field>
我将过滤器添加到我想默认应用过滤器的视图中。
<record model="ir.ui.view" id="view_employee_tree">
<field name="name">employee.tree</field>
<field name="model">employee</field>
<field name="context">{"search_default_dept_search":1}</field>
<field name="priority" eval="8" />
<field name="arch" type="xml">
<tree string="Employee">
<field name="e_dept"/>
<field name="employee_id"/>
<field name="employee_name"/>
</tree>
</field>
</record>
但是,用户仍然可以删除搜索栏中的默认过滤器。我怎样才能阻止用户删除过滤器?
您可以在您的查看操作中提供相同的域,这样这可以在默认情况下被过滤掉,没有人可以删除。
<field name="domain">[('e_dept', 'in', ['HR','Audit'])]</field>
默认情况下,odoo 允许您在搜索视图中删除过滤器。
根据您所说的,我认为您不需要用户查看其他记录。
你可以通过两种技术来做到这一点,一种是简单的,一种是使用动作定义
<record id="your_action_id" model="ir.actions.act_window">
....
....
....
....
<!-- in your action definition just add a domain like this -->
<field name="domain">[('e_dept', 'in', ['HR','Audit'])]</field>
</record>
在这种技术中,当用户点击执行菜单时,odoo 会为所有用户提供
此操作他们只会看到与域匹配的记录。如果这就是你
想用。
有时您希望保留相同的菜单,但您希望他们看到一组用户
只有与域匹配的记录,但对于其他用户组(如管理员)
您希望他们看到所有记录。您需要使用 ir.rule
.
来执行此操作
假设您希望他们看到的用户组只记录与您的相匹配的记录
域是:'hr_audi_group'
<record model="ir.rule" id="hr_audi_group_rule">
<field name="name">Show only 'HR' and 'Audit' record for hr_audi_group</field>
<field name="model_id" ref="model_employee"/>
<field name="domain_force">[('e_dept', 'in', ['HR','Audit'])]</field>
<field name="perm_read" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_unlink" eval="True"/>
<-- this rule will be applied only for users that belong to this group -->
<field name="groups" eval="[(4,ref('hr_audi_group')]"/>
</record>
因此,在某些用户的同一菜单中,它会显示所有记录,但对于拥有该记录的用户
到 hr_audi_group 他们只会看到部分记录。
希望对你有所帮助。
我已经创建了一个搜索视图并在其中定义了我的过滤器:
<record id="dept_search_view" model="ir.ui.view">
<field name="name">employee.search.view</field>
<field name="model">employee</field>
<field name="arch" type="xml">
<search string="dept_search">
<filter string="Department" name="dept_search" domain="[('e_dept', 'in', ['HR','Audit'])]">
</filter>
</search>
</field>
我将过滤器添加到我想默认应用过滤器的视图中。
<record model="ir.ui.view" id="view_employee_tree">
<field name="name">employee.tree</field>
<field name="model">employee</field>
<field name="context">{"search_default_dept_search":1}</field>
<field name="priority" eval="8" />
<field name="arch" type="xml">
<tree string="Employee">
<field name="e_dept"/>
<field name="employee_id"/>
<field name="employee_name"/>
</tree>
</field>
</record>
但是,用户仍然可以删除搜索栏中的默认过滤器。我怎样才能阻止用户删除过滤器?
您可以在您的查看操作中提供相同的域,这样这可以在默认情况下被过滤掉,没有人可以删除。
<field name="domain">[('e_dept', 'in', ['HR','Audit'])]</field>
默认情况下,odoo 允许您在搜索视图中删除过滤器。
根据您所说的,我认为您不需要用户查看其他记录。 你可以通过两种技术来做到这一点,一种是简单的,一种是使用动作定义
<record id="your_action_id" model="ir.actions.act_window">
....
....
....
....
<!-- in your action definition just add a domain like this -->
<field name="domain">[('e_dept', 'in', ['HR','Audit'])]</field>
</record>
在这种技术中,当用户点击执行菜单时,odoo 会为所有用户提供 此操作他们只会看到与域匹配的记录。如果这就是你 想用。
有时您希望保留相同的菜单,但您希望他们看到一组用户
只有与域匹配的记录,但对于其他用户组(如管理员)
您希望他们看到所有记录。您需要使用 ir.rule
.
假设您希望他们看到的用户组只记录与您的相匹配的记录
域是:'hr_audi_group'
<record model="ir.rule" id="hr_audi_group_rule">
<field name="name">Show only 'HR' and 'Audit' record for hr_audi_group</field>
<field name="model_id" ref="model_employee"/>
<field name="domain_force">[('e_dept', 'in', ['HR','Audit'])]</field>
<field name="perm_read" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_unlink" eval="True"/>
<-- this rule will be applied only for users that belong to this group -->
<field name="groups" eval="[(4,ref('hr_audi_group')]"/>
</record>
因此,在某些用户的同一菜单中,它会显示所有记录,但对于拥有该记录的用户 到 hr_audi_group 他们只会看到部分记录。
希望对你有所帮助。