odoo实操6
xml视图☞细节决定成败
这次的内容很细
权限的使用
Odoo权限的使用—在xml中的使用:
# 在网页展示的视图中,只有mrp_group_manager的用户才能看到name字段
<field name="name" groups="mrp.mrp_group_manager"/>
Odoo权限的使用—在python代码中的使用:
# name字段只有mrp_group_user,mrp_group_manager用户则才能看见,但只有mrp_group_manager用户能进行编辑
name = fields.Char(string=u'名字',read=['mrp_group_user','mrp_group_manager'], write=['mrp_group_manager'])
以上两个都是针对整个模型而言设置的权限,接下来就是针对模型中不同的记录进行权限设置,比如用户角色只能看见和自己相关的订单而看不了别人的。
<record model="ir.rule" id="rule_oa">
<field name="name">流程单</field>
<field name="model_id" ref="model_oa"/>
<field name="global" eval="True"/>
<field name="domain_force">
[('message_partner_ids.user_ids.id','parent_of',user.id)]
</field>
<field name="groups" eval="[(4,ref('group_flowmanager_user'))]"/>
</record>
数据的筛选
1. Xml中的数据筛选
视图界面上的手动筛选
<record id="oa_filter" model="ir.ui.view">
<field name="name">流程单筛选</field>
<field name="model">oa</field>
<field name="arch" type="xml">
<search string="Search flow">
<field name="oa_name"/>
<field name="oa_applicant"/>
<field name="oa_approver"/>
<field name="oa_nextapprover"/>
<field name="oa_state"/>
<filter string="单据状态分组" name="state_group" domain="[]" context="{'group_by':'oa_state'}"/>
<filter string="我的请求" name="my_request" domain="[('user_id', '=', uid)]"/>
<filter string="我的待办" name="my_approvering"
domain="[('oa_approver.user_id.id','parent_of', uid),('oa_state','!=','ok')]"/>
<filter string="我的已办" name="my_approvered" domain="[('oa_flowwaylines.positer_state','!=',False),('oa_flowwaylines.candidate_ids.user_id.id', 'parent_of', uid)]"/>
</search>
</field>
</record>
在action中记得引用此search
<field name="search_view_id" ref="oa_ordertype_filter"></field>
在action中对模型进行直接筛选
<record model="ir.actions.act_window" id="action_window_oa_flow_context">
<field name="name">流程</field>
<field name="res_model">oa.flow.line.content</field>
<field name="view_mode">form,tree</field>
<field name="view_id" ref="oa_flow_content_list"></field>
<field name="domain">[('line_lvcid', '=', active_id)]</field>
<field name="context">
{'search_default_line_lvcid': active_id, 'default_line_lvcid': active_id}
</field>
</record>
在子表内筛选出归属于当前这条数据的所有数据
2. 在python代码中的数据筛选
字段创建时直接删选
project_id = fields.Many2one( 'project.project', 'Project',
domain="[('billable_type', 'in', ('no', 'task_rate')),
('analytic_account_id', '!=', False),
('company_id', '=', company_id)]",
readonly=True,
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]},
help='Select a non billable project on which tasks can be created.')
多级联动式筛选
利用onchange方法实现字段联动
@api.onchange('model_name')
def _onchange_model_name(self):
res = {
'domain': {'model_view': [('model', '=', self.model_name.model)]},
}
return res