one2many поле получить номер строки - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть модуль, содержащий one2many в поле.

пока я создаю строку данных в этом поле o2m, я бы хотел добавить к ней номер строки.

Я попробовал какой-то метод, который нашел на форуме, например эту ссылку .

но поскольку у меня нет функции с именем _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")

"нет" - это поле, в котором я хочу показать количество строк. моя проблема:

как я могу получить количество строк?

так как функция декорирования onchage не может получить данные из базы данных.

1 Ответ

0 голосов
/ 10 апреля 2019

Я сам нашел решение, и оно простое:

использовать зависит от декоратора.

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)

надеюсь, он вам поможет.

...