one2many 字段获取行号
one2many field get row number
我有一个包含 one2many 字段的模块。
当我在此 o2m 字段中创建数据行时,我想向其附加一个行号。
我尝试了一些我在论坛上找到的方法,比如this link。
但是因为我没有叫 _onchange_partner_id() 的函数,所以我不知道如何使用它。
不过好像是老版本的方法,我搞不好
class YcWeight(models.Model):
_name = "yc.weight"
customer_detail_ids = fields.One2many("yc.weight.details", "name", "customer details")
class YcWeightDetails(models.Model):
_name = "yc.weight.details"
name = fields.Many2one("yc.weight", "weight detail list", ondelete="cascade")
no = fields.Integer("row number")
"no" 是我想显示行数的字段。
我的问题是:
如何获取行数?
因为 onchage 装饰函数无法从数据库中获取数据。
我自己找到了解决办法,很简单:
使用 depends 装饰器。
class YcWeightDetails(models.Model):
_name = "yc.weight.details"
name = fields.Many2one("yc.weight", "weight detail list", ondelete="cascade")
no = fields.Integer("row number")
compuute_no = fields.Integer("invisible field", compute= "_get_row_no")
创建一个字段"compuute_no"来计算。
@api.depends("compuute_no")
def _get_row_no(self):
if self.ids:
count =1
for rec in self:
weight_id = self.env['yc.weight.details'].search([('id','=', rec.id)])
weight_id.write({'no': count})
count+=1
或覆盖创建方法
@api.model
def create(self, vals):
main_key = self.env["yc.weight"].search([], order="id desc", limit=1).id
item_key = vals["name"]
if item_key and main_key == item_key:
number = len(self.env["yc.weight.details"].search([("name", "=", item_key)]))
vals.update({"no": number + 1})
return super(YcWeightDetails, self).create(vals)
希望对您有所帮助
我有一个包含 one2many 字段的模块。
当我在此 o2m 字段中创建数据行时,我想向其附加一个行号。
我尝试了一些我在论坛上找到的方法,比如this link。
但是因为我没有叫 _onchange_partner_id() 的函数,所以我不知道如何使用它。
不过好像是老版本的方法,我搞不好
class YcWeight(models.Model):
_name = "yc.weight"
customer_detail_ids = fields.One2many("yc.weight.details", "name", "customer details")
class YcWeightDetails(models.Model):
_name = "yc.weight.details"
name = fields.Many2one("yc.weight", "weight detail list", ondelete="cascade")
no = fields.Integer("row number")
"no" 是我想显示行数的字段。 我的问题是:
如何获取行数?
因为 onchage 装饰函数无法从数据库中获取数据。
我自己找到了解决办法,很简单:
使用 depends 装饰器。
class YcWeightDetails(models.Model):
_name = "yc.weight.details"
name = fields.Many2one("yc.weight", "weight detail list", ondelete="cascade")
no = fields.Integer("row number")
compuute_no = fields.Integer("invisible field", compute= "_get_row_no")
创建一个字段"compuute_no"来计算。
@api.depends("compuute_no")
def _get_row_no(self):
if self.ids:
count =1
for rec in self:
weight_id = self.env['yc.weight.details'].search([('id','=', rec.id)])
weight_id.write({'no': count})
count+=1
或覆盖创建方法
@api.model
def create(self, vals):
main_key = self.env["yc.weight"].search([], order="id desc", limit=1).id
item_key = vals["name"]
if item_key and main_key == item_key:
number = len(self.env["yc.weight.details"].search([("name", "=", item_key)]))
vals.update({"no": number + 1})
return super(YcWeightDetails, self).create(vals)
希望对您有所帮助