如何使用Odoo从表单字段中获取值?

时间:2014-11-25 09:47:00

标签: openerp

我在表单视图中有这个字段:

<field name="value"/>

当有人想要添加新值时,我希望从字段中获取值,这可能是我在PHP中$_GET['value']的方式。

简单示例:

当用户插入一个值时,我希望程序检查它是否大于所有值的总和,并打印如下错误消息:

  

无法添加该值,因为它大于所有值的总和

到目前为止我写过这个:

view.xml用

<?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>

test.py

from openerp import models
from openerp import fields

class test(models.Model):
    _name = "test.odoo"
    value = fields.Integer()

1 个答案:

答案 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!")