如何在One2many字段或关系表上基于分组依据进行搜索视图

时间:2018-09-06 11:36:02

标签: python odoo

我在Openerp 7中遇到了搜索的新问题。当我试图按关系表的某些字段分组时,它不起作用。 例如,我需要合同模块(hr_contract表)中的职位名称(数据库字段:job_id),条件:primary_contract(自定义字段)为“是”,但是我将按员工模块中合同表的职位名称进行分组(hr_employee表)。而Job(数据库字段:job_id)已经存在于Employee Module(hr_employee表)中,但是我不想按Employee表的Job字段进行分组。我需要根据合同表的职位分组。请给我任何解决方案。 这是我的代码,

在employee_view_xml中,

<record id="extend_view_employee_filter" model="ir.ui.view">
    <field name="name">Employees</field>
    <field name="model">hr.employee</field>
    <field name="inherit_id" ref="hr.view_employee_filter"/>
    <field name="arch" type="xml">
        <xpath expr="//field[@name='name']" position="after">
            <filter icon="terp-go-month" 
                string="New Employee"
                domain="[('joining_date','&lt;=',(context_today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('joining_date','&gt;=',(context_today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]"
                help="Employees who have joined current month ...." />

            <filter icon="" 
                string="Unsigned Contract"
                domain="[('contract_ids', '=', False)]"
                help="Employees who have not any contract on Contract module ...." />

            <!-- <filter icon="" 
                string="Extend Contract"
                domain="['&amp;',('contract_ids.primary_contract', '=', 1),('contract_ids.date_end', '&gt;', (context_today().strftime('%%Y-%%m-%%d')))]"
                help="Employees who need to extend contract ...." /> -->

            <filter icon="terp-go-month" 
                string="Resigned Employee"
                domain="[('leaving_date','&lt;=',(context_today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('leaving_date','&gt;=',(context_today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]"
                help="Employees who have resigned current month ...." />
        </xpath>           
        <xpath expr="//group[@string='Group By...']/filter[@string='Company']" position="after">
            <filter string="Joining Date" domain="[]" context="{'group_by': 'joining_date'}"/>
            <filter string="Team" domain="[]" context="{'group_by': 'team_id'}"/>
            <filter name="get_group_by_job_of_contracts" string="Job (Contract)" domain="[('contract_ids.primary_contract', '=', 1)]" context="{'group_by': 'contract_ids[0]'}" />
        </xpath>
    </field>
</record>

在employee.py中,

'contract_ids': fields.one2many('hr.contract', 'employee_id', string='All Contracts', required=False, domain=[('active','=',True)], store=True)

在contract.py中,

'employee_id': fields.many2one('hr.employee', "Employee", required=True)
'job_id': fields.many2one('hr.job', 'Job Title')

enter image description here

预先感谢

1 个答案:

答案 0 :(得分:0)

无法通过many2manyone2many字段进行分组。列表视图不是为此设计的。您已经了解了这一点,因为您正在尝试对员工使用第一份合同。但这还是行不通的。

如果您确实想将第一个合同用于分组依据,请在hr.employee上定义与contract_ids.job_id相关的相关字段:

_columns = {
    'first_contract_job_id': fields.related(
        'contract_ids', 'job_id', type='many2one',
        relation='hr.job', string='First Contract's Job', store=True),
}

那应该采用第一个合同的job_id。存储此字段很重要,因为Odoo不能按非数据库持久性字段分组。 但是我不确定它是否会正常工作,因为one2many上这样一个相关字段的第一个示例是在Odoo V8中使用的,例如product.template。试试吧。

如果您与一个员工签订了多个合同,则应使用计算字段而不是相关字段。