我在项目模块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!
所以我总是遇到问题,无论截止日期是否大于开始日期。
有人可以帮忙吗? 感谢。
答案 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")