我的约束方法不适用于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:表&#39; kindergarten_model&#39;:无法在列&#39; id_number&#39;上设置NOT NULL约束! 如果您想拥有它,您应该更新记录并手动执行: ALTER TABLE kindergarten_model ALTER COLUMN id_number SET NOT NULL
答案 0 :(得分:1)
如上所述,在将required参数设置为true之前,看起来某些数据已经为空。
如果您不熟悉SQL,odoo有一个可用于访问数据库的shell。
odoo-bin -d <database_name> shell
在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手动完成。
答案 1 :(得分:0)
添加少量记录后是否添加了约束?
一般来说,当postgres无法设置&#34; NOT NULL&#34;到列,因为它已经有空值