【问题标题】:Remove selectable properties from "Add Custom Filter"/"Add Custom Group" on ODOO Tree-View从 ODOO 树视图的“添加自定义过滤器”/“添加自定义组”中删除可选属性
【发布时间】:2020-07-14 09:51:54
【问题描述】:

我想删除出现在树视图上的“添加自定义过滤器...”和“添加自定义组...”中的许多标准过滤器属性(此处:hr.employee.tree)。

为选择而出现的过滤器属性,显然是树视图关联模型中的所有字段,但我不需要全部。

我想出了一个非常有前途的方法,它实际上可以从过滤器/分组中删除这些属性,但是在相同的表单视图上保存创建/编辑时会引发异常型号:

## These are the fields I want to keep in "Filter by"/"Group by"
filerable_groupable_fields = ['name','phone','private_email','gender','department_id','work_email','work_phone','birthday']

@api.model
def fields_get(self, allfields=None, attributes=None):
    res = super(HrEmployee, self).fields_get(allfields, attributes=attributes) 
    not_filerable_groupable_fields = set(self._fields.keys()) - set(self.filerable_groupable_fields)
    for field in not_filerable_groupable_fields:
        res[field]['selectable'] = False ## Remove from FilterBy
        res[field]['sortable'] = False ## Remove from GroupBy
    return res

在表单视图中保存我在上面循环中触及的基本上每个字段时出现异常:

[...]
File "/usr/lib/python3/dist-packages/odoo/addons/hr/models/hr_employee.py", line 244, in create
    employee = super(HrEmployeePrivate, self).create(vals)
  File "<decorator-gen-105>", line 2, in create
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 343, in _model_create_multi
    return create(self, [arg])
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 297, in create
    tracked_fields = self._get_tracked_fields()
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 554, in _get_tracked_fields
    return self.fields_get(tracked_fields)
  File "/mnt/extra-addons/custom_swaf_hr/models/hr_employee.py", line 165, in fields_get
    res[field]['selectable'] = False ## Remove FilterBy
KeyError: 'mobile_phone'

跟踪字段 (mail_thread.py) 似乎出现异常。

有什么想法吗?

【问题讨论】:

    标签: python odoo odoo-13


    【解决方案1】:

    我已经想通了。这是解决方案:

    @api.model
    def fields_get(self, allfields=None, attributes=None):
        res = super(HrEmployee, self).fields_get(allfields, attributes=attributes) 
        not_filerable_groupable_fields = set(self._fields.keys()) - set(self.filerable_groupable_fields)
        for field in not_filerable_groupable_fields:
            if field in res:
                res[field]['selectable'] = False ## Remove FilterBy
                res[field]['sortable'] = False ## Remove GroupBy            
        return res
    

    也许这对其他人也有帮助。

    【讨论】:

    • 你的错误的解决方案是不费吹灰之力的,即使对你我猜 ;-) 但你的要求的解决方案真的很好,谢谢分享。
    猜你喜欢
    • 2012-07-10
    • 1970-01-01
    • 2011-11-12
    • 2018-08-05
    • 2013-01-31
    • 2011-11-28
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多