我的模型中有这个字段和一个方法,该方法旨在检测many2one中的更改:
manytoone = fields.Many2one(comodel_name="product.template", string="Many to One",
required=False, )
cambio_realizado = fields.Boolean(string="Cambios en Many to One", default=False)
@api.onchange('manytoone')
def _detectar_cambio(self):
self.cambio_realizado = TrueNo作用于布尔域中的default=False。始终以True开头。
另一个问题是no在计算字段中起作用:
@api.multi
def computer_function(self):
self.computation = 243+234
computation = fields.Float(string="Result: ", compute=computer_function, readonly=True)结果是零..。总是在视图中。
标识ok,并且模型是继承的
我的班级和我的观点和技巧:
class CustomModule(models.Model):
_inherit = 'sale.order'
name = fields.Char('campos relacionales, decoradores onchange y funcion computar')
manytoone = fields.Many2one(comodel_name="product.template", string="Many to One",
required=False, )
cambio_realizado = fields.Boolean(string="Cambios en Many to One")
@api.onchange('manytoone')
def _detectar_cambio(self):
self.cambio_realizado = True
onetomany = fields.One2many(comodel_name="sale.order", inverse_name="manytoone",
string="One to Many", required=False, )
manytomany = fields.Many2many(comodel_name="sale.order",
relation="sale_handler",
column1="order_id", column2="order_handler_id",
string="Many to Many", )
@api.depends('computation')
def computer_function(self):
for record in self:
record.computation = 300
computation = fields.Float(string="Result: ", compute=computer_function, readonly=True)
<odoo>
<!-- Inherit Form View to Modify it -->
<record id="custom_view_custom" model="ir.ui.view">
<field name="name">custom.view.custom</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//sheet" position="inside">
<group>
<field name="manytoone"/>
<field name="onetomany"/>
<field name="manytomany"/>
</group>
<group>
<field name="computation"/>
<field name="cambio_realizado"/>
</group>
</xpath>
</field>
</record>
</odoo>发布于 2019-04-05 19:16:42
@api.one定义computer_function(自身):self.computation = 243+234
computation = fields.Float(string="Result: ", compute=computer_function, readonly=True)在代码中使用@api.one
发布于 2019-04-06 10:13:15
1- onchnage,当您尝试创建新记录时,onchange会自动调用,然后cambio_realizado设置为true
@api.onchange('manytoone')
def _detectar_cambio(self):
for o in self:
if o.manytoone:
o.cambio_realizado = True2-在计算中,最好使用api.depends('somefield'),但下面的代码可能对您有用,请使用循环,不要使用只读
@api.multi
def computer_function(self):
for o in self:
o.computation = 243+234
computation2 = fields.Float(string="Result: ", compute=computer_function)https://stackoverflow.com/questions/55524079
复制相似问题