在start_date和截止日期设置约束

时间:2017-12-19 15:31:51

标签: python-2.7 openerp odoo-10

我在项目模块start_date和stop_date中添加了两个字段。我尝试添加一个控制输入的代码,只有在stop_date大于start_date时才保存记录。所以我将此代码添加到项目类中:

    date_start = fields.Date(string='Start Date')
    date_stop = fields.Date(string= 'Deadline')
    @api.onchange('date_stop')
    def _onchange_date_stop(self):
    if self.date_start != False and self.date_stop != False:
        if (self.date_stop<=self.date_start):
            raise ValidationError("deadline date Should be greater than start date!")
    _constraints = [
    (_onchange_date_stop, 'deadline date 2 Should be greater than start date!', []),
]

现在,如果截止日期早于开始日期,则会引发验证错误:

    deadline date Should be greater than start date! 

当我尝试保存记录时出现此错误:

    deadline date 2 Should be greater than start date!

    Error details:
    deadline date Should be greater than start date!
    None 

但是当截止日期大于开始日期时,我收到了这个错误:

    deadline date 2 Should be greater than start date!  

所以我总是遇到问题,无论截止日期是否大于开始日期。

有人可以帮忙吗? 感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用约束装饰器

@api.constrains('date_start', 'date_stop')
def check_date_fields(self):
    if self.date_start and self.date_stop:
        if self.date_stop <= self.date_start:
            raise ValidationError("deadline date Should be greater than start date!")

答案 1 :(得分:1)

除了onchange我们可以使用约束...它有助于在创建和编辑时以及在更改时验证某些内容。这是我的代码,它工作正常

date_start = fields.Date(string='Start Date')
date_stop = fields.Date(string= 'Deadline')

@api.multi
@api.constrains('date_start', 'date_stop')
def _check_date(self):
    date_start = self.date_start
    date_stop = self.date_stop

    if (date_start and date_stop) and (date_start > date_stop):
        raise ValidationError(_('The start date must be less than to the end date. ')

答案 2 :(得分:0)

此代码也适用于我:

    date_start = fields.Date(string='Start Date')
    date_stop = fields.Date(string= 'Deadline')

    @api.one
    @api.constrains('date_start', 'date_stop')
    def _check_deadline(self):
        if self.date_stop <= self.date_start:
            raise ValidationError("deadline must be greater than start date")