我在表单视图中有这个字段:
<field name="value"/>
当有人想要添加新值时,我希望从字段中获取值,这可能是我在PHP中$_GET['value']
的方式。
简单示例:
当用户插入一个值时,我希望程序检查它是否大于所有值的总和,并打印如下错误消息:
无法添加该值,因为它大于所有值的总和
到目前为止我写过这个:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="action_test" model="ir.actions.act_window">
<field name="name">Insert</field>
<field name="res_model">test.odoo</field>
<field name="view_mode">form,tree</field>
</record>
<record id="view_tree_test" model="ir.ui.view">
<field name="name">Inset.tree</field>
<field name="model">test.odoo</field>
<field name="arch" type="xml">
<tree string="T">
<field name="create_uid"/>
<field name="value" sum="Total Sum"/>
</tree>
</field>
</record>
<record id="view_from_test" model="ir.ui.view">
<field name="name">Inset.form</field>
<field name="model">test.odoo</field>
<field name="arch" type="xml">
<form string="T_Form">
<group>
<field name="value"/>
</group>
</form>
</field>
</record>
<menuitem name="Test Module" id="main_menu_test" sequence="3"/>
<menuitem name="TEST" id="sub_menu" parent="main_menu_test"/>
<menuitem action="action_test" id="action_menu" parent="sub_menu" />
</data>
</openerp>
from openerp import models
from openerp import fields
class test(models.Model):
_name = "test.odoo"
value = fields.Integer()
答案 0 :(得分:5)
您无法独立于数据库层考虑odoo中的表单视图。
表单中的数据会立即(并自动)保存在数据库中。您可以稍后使用the ORM methods访问它。
我不知道你想要达到什么目标,所以我很难给你一个具体的例子。每个表单视图都与单个ORM模型相关联。如果要在保存之前/之后立即对数据执行某些操作,通常会对ORM模型进行子类化并覆盖其中一种方法。
class Foo(models.Model):
_inherit = 'other.foo'
@api.model
def create(self, vals):
record = super(Foo, self).create(vals)
print "A new Foo with name={} and bar={} has been created!".format(
record.name,
record.bar,
)
return record
这是验证表单的方式:
from openerp import models, fields, api, exceptions
class test(models.Model):
_name = 'test.odoo'
value = fields.Integer()
@api.one
@api.constrains('value')
def _check_value(self):
if self.value > 25:
raise exceptions.ValidationError("The value is too large!")