Search code examples
pythonodoovalueerror

odoo 14: ValueError: invalid literal for int() with base 10: 'categry_id.base_category'


when click on Many2one brand_id field in view (xml), it throwing error. ValueError: invalid literal for int() with base 10: 'categry_id.base_category'

added a computed field base_category in product.category which type is Integer, with help of @SDBot here. first in the domain of brand_id i didn't used int() but when searched for error above, i tried to use int('categry_id.base_category') but still getting same error.

below are 2 models, first in which i created base_category value -thanks to @SDBot-, (it is created from a Char type field and storing value in Integer type field and even after update values manually through psql the error is same) second is where i am getting error in the domain filter.

please help to solve the problem.

class ProductCateg(models.Model):
    _inherit = 'product.category'

    level = fields.Integer(string='Level', compute='_compute_level', store=True)
    base_category = fields.Integer('Base Cat', compute='_compute_basecat', store=True)

    @api.depends('parent_id')
    def _compute_level(self):
        for record in self:
            record.level = (record.parent_id.level or 0) + 1

    @api.depends('parent_id')
    def _compute_basecat(self):
        for rec in self:
            split_str = (rec.parent_path or '').split('/')
            rec.base_category = int(split_str[1]) if len(split_str) > 1 else ''


class OrderItems(models.Model):
    _name = 'tests.orderitems'
    _description = "Tests Order Items"

    store_id = fields.Many2one('tests.stores', string="Store", ondelete='cascade')
    order_id = fields.Many2one('tests.testsorders')
    categry_id = fields.Many2one('product.category', string="Category",
                                 domain="[['complete_name', 'not like', '%Brands%']]")
    items_id = fields.Many2one('tests.storeitems', string="Item",
                               domain="[['categs_id', '=', categry_id]]")
    brand_id = fields.Many2one('product.category', string="Brand",
                               domain=[('base_category', '=', int('categry_id.base_category')),('complete_name', 'like', '%Brands%')])

Solution

  • You need to show the value within the tests.orderitems first:

        categry_id = fields.Many2one('product.category', string="Category",
                                     domain="[['complete_name', 'not like', '%Brands%']]")
        base_category = fields.Integer('Base Cat', related='categry_id.base_category')
        brand_id = fields.Many2one('product.category', string="Brand",
                                   domain="[('base_category', '=', base_category),('complete_name', 'like', '%Brands%')])"