从odoo中的只读字段保存值

从odoo中的只读字段保存值,odoo,odoo-10,odoo-9,odoo-11,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') d

我在表单上有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

在这种情况下,我更喜欢计算字段。公式更改不会保存只读字段(例如更改事件)。在Odoo 11中,为视图中的这种行为引入了一个新选项
force_save
,但是以前的版本没有这个选项(除了社区模块,例如)

计算字段的解决方案:

class myClass(models.Model):
number_1=fields.Integer()
number_2=字段。整数()
sum=fields.Integer(compute=“compute\u sum”,store=True)
@依赖于('number_1'、'number_2')
@api.multi
def计算和(自身):
请自行记录:
总计=record.number\u 1+record.number\u 2
record.sum=总计
不需要更改视图定义。在正常的
Integer
字段中也不需要
store
参数。默认值
0
已经是
Integer
上的默认值,因此需要定义它


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

我希望下面的代码可以帮助您

在我的情况下,“have Total year”字段是只读的,根据“出生日期”,将更新总年份

使用onchange方法,可以在字段上获取总年份,但在保存该记录时,总年份字段设置为空

解决方案:-

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

例如:-

Python文件

年份合计=字段。浮点()

总计\年度\副本=字段。浮点()

起始日期时间导入日期​​

变更法 @api.onchange('dob') def onchange_dob(自): 今天=日期。今天() self.total\u year=self.total\u year\u copy=today.year-dob.year-((today.month,today.day)<(dob.month,dob.day))

创建方法 @api.model

def创建(自身、VAL):

如果VAL中的“总年份副本”:

更新({'total\u year':vals.get('total\u year\u copy'))

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

写入方法 @api.multi

def写入(自身、VAL):

如果VAL中的“总年份副本”:

更新({'total\u year':vals.get('total\u year\u copy'))

返回超级(项目,自我).write(VAL)

Xml文件

field name=“total\u year”readonly=“1”

字段名称=“总计\年度\副本”不可见=“1”

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

致以最良好的祝愿


安基特·甘地(Ankit H Gandhi)

请花点时间通读这本书。堆栈溢出上的格式设置与其他站点不同。