Как искать по вычисляемому полю odoo? - PullRequest
2 голосов
/ 11 апреля 2019

Я не могу искать по вычисляемому полю

Я перезаписываю поле имени в product.template для вычисления, поэтому мне нужно искать по названию продукта

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)

Это ошибка из журнала

raise ValueError("Invalid leaf %s" % str(self.leaf))
ValueError: Invalid leaf (False, 'ilike', 'تيل')

1 Ответ

1 голос
/ 11 апреля 2019

Непостоянные поля не доступны для поиска. Это связано с тем, что Odoo пытается проанализировать наборы / фильтры домена в запросе SQL, который, разумеется, ищет существующие столбцы. Несохраненные поля не имеют столбца таблицы.

У вас есть два варианта:

  1. сделать поле сохраненным с store=True
  2. определить метод поиска и установить его в поле с помощью search='name_of_search_method ( дополнительная информация здесь )

Первый вариант прост, но сохранение вычисленных полей может оказать плохое или хорошее влияние на производительность. Второй вариант намного сложнее, потому что вам нужно подумать, как сформировать поиск, используя зависимые поля или каждое поле, которое вы используете в вычислениях.

...