Odoo Studio:我不能将 m2o 字段中的域用于 hr.employee 字段

问题描述

我正在使用 odoo Studio 创建一个模型,其中包含员工模型的 m2o 字段,我需要将其域设置为特定类别。

  1. 我创建了一个员工并分配了类别“Operario”

    enter image description here

  2. 我在 odoo Studio 中创建了一个新模型,将 m2o 字段添加到 hr.employee 模型,并添加了下一个域:[["category_ids.name","in","Operario"]]

    enter image description here

  3. 我尝试在新模型中创建一个注册表,但是如果我不是 HR 安全组的成员,那么当我单击 o2m 字段时会收到此错误

ValueError: Invalid field hr.employee.public.category_ids in Leaf ('category_ids.name','in','Operario')

完整代码

Traceback (most recent call last):

  File "/home/odoo/src/odoo/14.0/odoo/addons/base/models/ir_http.py",line 237,in _dispatch

    result = request.dispatch()

  File "/home/odoo/src/odoo/14.0/odoo/http.py",line 683,in dispatch

    result = self._call_function(**self.params)

  File "/home/odoo/src/odoo/14.0/odoo/http.py",line 359,in _call_function

    return checked_call(self.db,*args,**kwargs)

  File "/home/odoo/src/odoo/14.0/odoo/service/model.py",line 94,in wrapper

    return f(dbname,**kwargs)

  File "/home/odoo/src/odoo/14.0/odoo/http.py",line 347,in checked_call

    result = self.endpoint(*a,**kw)

  File "/home/odoo/src/odoo/14.0/odoo/http.py",line 912,in __call__

    return self.method(*args,line 531,in response_wrap

    response = f(*args,**kw)

  File "/home/odoo/src/odoo/14.0/addons/web/controllers/main.py",line 1377,in call_kw

    return self._call_kw(model,method,args,kwargs)

  File "/home/odoo/src/odoo/14.0/addons/web/controllers/main.py",line 1369,in _call_kw

    return call_kw(request.env[model],kwargs)

  File "/home/odoo/src/odoo/14.0/odoo/api.py",line 392,in call_kw

    result = _call_kw_model(method,model,line 365,in _call_kw_model

    result = method(recs,**kwargs)

  File "/home/odoo/src/odoo/14.0/odoo/models.py",line 1796,in name_search

    ids = self._name_search(name,operator,limit=limit)

  File "/home/odoo/src/odoo/14.0/odoo/models.py",line 1812,in _name_search

    return self._search(args,limit=limit,access_rights_uid=name_get_uid)

  File "/home/odoo/src/odoo/14.0/addons/hr/models/hr_employee.py",line 166,in _search

    ids = self.env['hr.employee.public']._search(args,offset=offset,order=order,count=count,access_rights_uid=access_rights_uid)

  File "/home/odoo/src/odoo/14.0/odoo/models.py",line 4492,in _search

    query = self._where_calc(args)

  File "/home/odoo/src/odoo/14.0/odoo/models.py",line 4248,in _where_calc

    return expression.expression(domain,self).query

  File "/home/odoo/src/odoo/14.0/odoo/osv/expression.py",line 438,in __init__

    self.parse()

  File "/home/odoo/src/odoo/14.0/odoo/osv/expression.py",line 640,in parse

    raise ValueError("Invalid field %s.%s in leaf %s" % (model._name,path[0],str(leaf)))

Exception



The above exception was the direct cause of the following exception:



Traceback (most recent call last):

  File "/home/odoo/src/odoo/14.0/odoo/http.py",line 639,in _handle_exception

    return super(JsonRequest,self)._handle_exception(exception)

  File "/home/odoo/src/odoo/14.0/odoo/http.py",line 315,in _handle_exception

    raise exception.with_traceback(None) from new_cause

ValueError: Invalid field hr.employee.public.category_ids in leaf ('category_ids.name','Operario')

错误详细信息的最后一行,我看到了 public 这个词,我不确定那是不是子模型,无论如何我不知道在哪里为非 HR 成员设置这些权限。

解决方法

首先,您需要在开始时使用 employee_id 而不是 category_ids。因为它存在于 hr.employee 表中,而不是 hr.employee.public 表中。

试试这个方法,

[["employee_id.category_ids.name","=","Operario"]]

也可以使用 in=like 代替 ilike 运算符,以便更好地与字符串类型的值集成。