我有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)
答案 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)