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%')])"
当单击视图中的 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%')])"