如何通过odoo计算域进行搜索?

时间:2019-04-11 15:48:50

标签: python python-3.x odoo odoo-11

我无法通过计算字段进行搜索

我覆盖了product.template中要计算的名称字段,因此我需要按名称搜索产品

Init container

这是日志中的错误

class autopart(models.Model):
_inherit = 'product.template'

@api.multi
@api.depends('item', 'car', 'model', 'dsc', 'drc', 'year', 'org')
def compute_amount(self):
    for rec in self:
        rec.name = " ".join(
            [rec.item and rec.item.name or "", rec.car and rec.car.name or "", rec.model and rec.model.name or "",
             rec.dsc and rec.dsc.name or "", rec.drc and rec.drc.name or "", rec.org and rec.org.name or "",
             rec.year and rec.year.name or ""])

def pro_searach(self, operator, value):

    if operator == 'like':
        operator = 'ilike'
        name = self.env['product.template'].search([('name', operator, value)], limit=None)
    return [(self.name, operator, value)]
name = fields.Char(string="Name", required=False ,compute=compute_amount,search=pro_searach)

1 个答案:

答案 0 :(得分:1)

非永久性字段不可搜索。这是因为Odoo试图将域元组/过滤器解析为一个SQL查询,这当然是在现有列上进行搜索。非存储字段没有表列。

您现在有两个选择:

  1. 使字段存储在store=True
  2. 定义搜索方法,并使用search='name_of_search_methodmore information here)在字段中进行设置

第一个选项很简单,但是存储计算字段可能会对性能产生不良影响或良好影响。第二种选择要困难得多,因为您必须考虑如何使用从属字段或您在计算中使用的每个字段来构成搜索。