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

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

当单击视图中的 Many2one brand_id 字段 (xml) 时,它会抛出错误。 ValueError:以 10 为底的 int() 无效文字:'categry_id.base_category'

product.category中添加了一个计算字段base_category,类型为Integer,在 @SDBot 的帮助下。 首先在 brand_id 的域中我没有使用 int() 但是当在上面搜索错误时,我尝试使用 int('categry_id.base_category') 但仍然得到同样的错误。

下面是 2 个模型,首先我在其中创建了 base_category 值 - 感谢 @SDBot-,(它是从 Char 类型字段创建并在 Integer 类型字段中存储值和 即使在通过 psql 手动更新值后,错误也是相同的) 第二个是我在域过滤器中遇到错误的地方。

请帮忙解决问题

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%')])

对于整数,您输入的默认值应该是 0 而不是 ''。

rec.base_category = int(split_str[1]) if len(split_str) > 1 else ''

Integer 类型的字段需要一个整数。所以只需在 else 部分给它一个整数。 Odoo 将 0 设置为默认值,您不能以数据库 NULL.

的形式设置 None
rec.base_category = int(split_str[1]) if len(split_str) > 1 else 0

您需要先显示tests.orderitems内的值:

    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%')])"