在odoo中从只读字段保存值

时间:2018-06-19 14:10:04

标签: odoo odoo-10 odoo-9 odoo-11

我在表单上有3个字段,字段总和为只读。单击“从只读保存数据”字段后,未存储在数据库中。

示例:

class myClass(models.Model):

number_1 = fields.Integer(store=True,default=0)
number_2 = fields.Integer(store=True,default=0)
sum = fields.Integer(store=True)

@api.onchange('number_1','number_2')
def compute_sum(self):
    total = self.number_1 + self.number_2
    self.sum = total

2 个答案:

答案 0 :(得分:3)

在这种情况下,我希望使用计算字段。公式更改不会保存只读字段(例如,发生更改事件时)。在Odoo 11中,为视图中的此行为引入了一个新选项force_save,但以前的版本没有此选项(社区模块(例如web_readonly_bypass by OCA)除外)。

计算字段的解决方案:

class myClass(models.Model):

    number_1 = fields.Integer()
    number_2 = fields.Integer()
    sum = fields.Integer(compute="compute_sum", store=True)

    @api.depends('number_1','number_2')
    @api.multi
    def compute_sum(self):
        for record in self:
            total = record.number_1 + record.number_2
            record.sum = total

无需更改视图定义。而且,普通store字段中也不需要Integer参数。默认值0已经是Integer的默认值,因此无需定义它。

您不必在视图readonly中明确定义sum,因为默认情况下,不带逆方法的计算字段是只读的。

答案 1 :(得分:0)

我希望下面的代码能对您有所帮助

在我的情况下,“总年”字段为只读字段,并且基于“出生日期”,总年将更新

使用onchange方法,可以获取“合计年”字段,但是当保存该记录时,“合计年”字段设置为空白

解决方案:-

创建总年份的新虚拟字段并将该虚拟字段值设置在原始字段上

示例:-

Python文件

total_year = fields.Float()

total_year_copy = fields.Float()

从日期时间导入日期起

更改方法

@ api.onchange('dob') def onchange_dob(): 今天= date.today() self.total_year = self.total_year_copy = Today.year-dob.year-(((today.month,Today.day)<(dob.month,dob.day))

创建方法

@ api.model

def create(self,vals):

如果以数值表示“ total_year_copy”:

vals.update({'total_year':vals.get('total_year_copy')})

返回超级(项目,自我)。创建(值)

写方法

@ api.multi

def write(self,vals):

如果以数值表示“ total_year_copy”:

vals.update({'total_year':vals.get('total_year_copy')})

返回super(Project,self).write(vals)

Xml文件

字段名=“ total_year”只读=“ 1”

字段名称=“ total_year_copy”不可见=“ 1”

希望这可以帮助您保存只读记录

最好的问候,

安吉·H·甘地