我的约束方法对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"时出现的,因为它已经具有空值