Odoo10 api限制卡住

时间:2017-03-28 08:53:30

标签: python openerp

我的约束方法不适用于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

2 个答案:

答案 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;到列,因为它已经有空值