from itertools import product from odoo import fields, models, api, tools, _ import logging import re import pysolr from odoo.exceptions import UserError import base64 import xlrd, xlwt import io _logger = logging.getLogger(__name__) class Keywords(models.Model): _name = 'keywords' _order= 'id desc' category_id = fields.Many2one('product.public.category', string='Category') keywords = fields.Char('Keywords') product_ids = fields.One2many('product.product', 'keyword_id', string='Products') @api.constrains('product_ids', 'keywords', 'category_id') def action_generate_products(self): for record in self: if not record.keywords: continue domain = [ ('name', 'ilike', record.keywords), ('product_rating', '>=', 8), ('unpublish', '=', False) ] # if record.category_id: # domain += [(record.product_ids.id, 'in', record.category_id.id)] matched_products = self.env['product.product'].search(domain) record.product_ids = [(6, 0, matched_products.ids)] _logger.info('Generated %s products for keyword "%s"', len(matched_products), record.keywords) @api.model def create(self, vals): record = super().create(vals) record.action_generate_products() return record def write(self, vals): result = super().write(vals) self.action_generate_products() return result