将Many2many字段添加到搜索条件后出现预期的单例错误

时间:2016-01-29 22:19:11

标签: python-2.7 openerp odoo-8 openerp-8

在search_count条件中添加了many2many字段后,我收到了预期的单例错误。

该结构由3个类组成,即工作,位置和员工。我要做的是在每个地点获得每份工作的员工人数。

这与xml中的many2many小部件一样正常工作:

(排除了字符串参数)

class job(models.Model):
  _inherit               = 'hr.job'

  rel_locations          = fields.Many2many(comodel_name='hr.locations')

  num_location_employees = fields.Integer(compute='_set_location_employees')

  def _set_location_employees(self):
     for rec in self:
        rec.num_location_employees = self.env['hr.employee'].search_count([('locations', '=', 3)])

它为我提供了一份工作清单,其中包含位于ID为3的员工人数。

但是,将id改为3后

('locations', '=', rec.rel_locations.id)

我得到了

  

预期单身人士:hr.locations(3,4)

这是必要的位置类

class locations(models.Model):
  _name          = 'hr.locations'

  employee       = fields.One2many(comodel_name='hr.employee', inverse_name='locations')
  rel_jobs       = fields.Many2many(comodel_name='hr.job')

  name           = fields.Char(...)

我对此仍然很陌生,任何帮助都将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

  1. 您应该使用 ID 而不是 id
  2. 在您的域中使用 而不是 =
  3. 像这样:

      

    ('locations','in',rec.rel_locations.ids)

    让我知道它是否有效。

答案 1 :(得分:0)

您只能使用点符号(。)来访问单个记录,并且您有多个记录。检查说明字段访问权限的部分documentation

  

尝试在多个记录上读取或写入字段会引发一个   错误。

rec.rel_locations是一个ORM one2many,包含2个hr.locations模型的记录。您首先获取每个记录的ID,然后像这样创建您的域:

(' locations',' in',[rel_location_id1,rel_location_id2])

有关更多信息,请查看我发布的文档部分以及:

1 2