简单的Odoo / Python / XML

时间:2017-01-20 13:55:29

标签: python xml openerp

我有2个问题。 第一个。

此字段必须是大于或等于50的整数。我该怎么做。

value = fields.Integer("Value", required=True)
第二个问题。

我想用“名字”添加搜索但是如果我运行这个男女同校我得到TypeError:Type不是构造函数。我的搜索部分出了什么问题?没有搜索部分它运行正常。

<record model="ir.ui.view" id="helloworld.list2">
      <field name="name">helloworld listx</field>
      <field name="model">helloworld.test2</field>
      <field name="arch" type="xml">
        <search>
          <field name="name"/>
        </search>
        <tree>
          <field name="name"/>
          <field name="reference"/>
        </tree>
      </field>
    </record>

更新

from openerp import models, fields, api
from openerp.exceptions import ValidationError


class HelloWorld(models.Model):
    _name = 'helloworld.test'
    name = fields.Char("Name", required=True, size=20)
    value = fields.Integer("Value", required=True)

    # I am adjusting the indentation below so the methods become part of your class

    @api.onchange('value')
    def _onchange_value(self):
        for record in self:
            if record.value < 20:
                raise ValidationError("Your record is too small: %s" % record.value) 

1 个答案:

答案 0 :(得分:2)

有几种方法可以做,但是约束&#39;装饰师可能是你想要的。如果没有,你可以覆盖&#39;写&#39;并且&#39;创造&#39;提出例外的方法。

约束函数将在写入或创建记录之前运行。除非值通过验证,否则不允许写入记录。

from odoo.exceptions import ValidationError

@api.constrains('value')
def _check_value_field(self):
    for record in self:
        if record.value < 50:
            raise ValidationError("Your record is too small: %s" % record.value)

关于您的搜索视图。您还有树视图。搜索视图和树视图完全是分开的。你应该单独定义它们。

<record model="ir.ui.view" id="helloworld.tree2">
      <field name="name">test2.tree</field>
      <field name="model">helloworld.test2</field>
      <field name="arch" type="xml">
        <tree>
          <field name="name"/>
          <field name="reference"/>
        </tree>
      </field>
</record>

<record model="ir.ui.view" id="helloworld.search2">
      <field name="name">test2.search</field>
      <field name="model">helloworld.test2</field>
      <field name="arch" type="xml">
        <search>
          <field name="name"/>
        </search>
      </field>
</record>

如果您希望使用“更改”立即提供对现场数据的验证,则可以使用&#39;功能也是如此(建议 CZoellner ),这将立即通知用户输入的值无效但不应用于记录验证,因为用户可以简单地绕过错误信息。这是一个例子。

from odoo.exceptions import ValidationError

@api.onchange('value')
def _onchange_value(self):
    for record in self:
        if record.value < 50:
            raise ValidationError("Your record is too small: %s" % record.value)