one2many字段获取行号

问题描述 投票:0回答:1

我有一个包含one2many字段的模块。

当我在这个o2m字段中创建数据行时,我想在其中附加一个行号。

我尝试了一些我在论坛中找到的方法,比如this link

但由于我没有名为_onchange_partner_id()的函数,我不知道如何使用它。

或者this link

但它似乎是一个老版本的方法,我不能很好。

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")

“否”是我想要显示行数的字段。我的问题是:

我怎样才能获得行数?

因为onchange修饰函数无法从db获取数据。

odoo-11 one2many
1个回答
0
投票

我自己找到了一个解决方案,很简单:

使用取决于装饰。

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

或覆盖create方法

@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)

希望它可以帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.