Odoo:限制可编辑树上的可编辑行

Odoo : limit editable rows on editable tree

假设我有一棵可编辑的树

<tree editable="top">
    <field name="date">
    <field name="value">
</tree>

现在假设我想让用户编辑最近 3 个日期的值,但其他日期应保持只读状态。

我该怎么做?

好吧,您可以向模型中添加一个布尔字段。这将是一个计算字段。基于该字段,您可以按如下方式应用 read-only 属性:

class TheModel(models.Model):
    _name = 'The.Model'
    
    old_dated = fields.Boolean(compute='_old_dated_rec')
    date = fields.Date()
    value = fields.Integer()

    @api.model
    def _old_dated_rec(self):
        """define the condition of old dated records which could be as"""
        recent_rec = self.search([], order='date desc', limit=3)
        old_rec = self.search([('id', 'not in', recent_rec._ids)])
        old_rec.write({'old_dated': True})

然后你可以应用一个调度器来运行每天调用这样的方法

<field name="old_dated" invisible="1" />
<field name="date" attrs="{'readonly':[('the_boolen_field','=',True)]}"/>

以这种方式,计算方法将更新布尔字段。