Odoo10 API 约束卡住了



我的约束方法对id_number不起作用。 无法弄清楚原因。

from odoo import models, fields, api
from odoo.exceptions import ValidationError
class KindeGarden(models.Model):
    _inherits = {'res.partner': 'partner_id'}
    _name = 'kindergarten.model'
    _description = 'Kindergarten'
   age = fields.Integer(string="Amžius", required=False, default="1")
   group = fields.Char(string="Grupė", compute="_compute_group", store=True)
   height = fields.Float(string="Ūgis", required=False)
   weight = fields.Float(string="Svoris",  required=False)
   id_number = fields.Integer(string="Registravimo Nr", required=True)
   @api.constrains('id_number')
   def _check_id_number_field(self):
       for i in self:
           if i.id_number < 10:
               raise ValidationError("Number is to small")

我也有这个

警告 -Kindegarden odoo.models.schema: 表 'kindergarten_model': 无法在列 'id_number' 上设置 NOT NULL 约束!如果要拥有它,则应更新记录并手动执行:更改表kindergarten_model更改列id_number设置为不为空

如上所述,在将必需参数设置为 true 之前,看起来有些数据已经是空的。

odoo有一个shell,如果你不熟悉SQL,你可以用它来访问你的数据库。

odoo-bin -d <database_name> shell

在外壳内,执行以下操作,以便您会看到。

>> records = env['kindergarten.model'].search([('id_number','=',False)])
>> len(records)

如果它返回一个除 0 之外的数字,则表示这些是 NULL 值。 所以喜欢。

>> for record in records:
       record.write({'id_number': 0.0})
>>env.cr.commit()

然后再次更新模块。

如果这不起作用,则需要使用 SQL 手动执行此操作。

添加几条记录后是否添加了约束?

您遇到的错误通常是当 postgres 无法为列设置"NOT NULL"时出现的,因为它已经具有空值

最新更新