我试图在Djando模型中跟踪薪酬,但这可能是年度、每日或每小时,因此RangeMinValueValidator
和RangeMaxValueValidator
的值应该取决于pay_type
,但我不确定如何做到这一点。到目前为止我所拥有的:
PAY_TYPE = Choices(
('annual', _('Annual')),
('daily', _('Daily')),
('hourly', _('Hourly')),
)
pay_range = models.IntegerRangeField(
bounds='[]',
validators=[
RangeMinValueValidator(1),
RangeMaxValueValidator(9999999)
]
)
pay_type = models.CharField(choices=PAY_TYPE, default=PAY_TYPE.annual)
编辑:
这感觉相当混乱,但到目前为止,遵循丹尼尔·罗斯曼的评论:
def clean(self):
# Validate pay_range min and max
annual_pay_range_minimum = 13000
annual_pay_range_maximum = 9999999
daily_pay_range_minimum = 25
daily_pay_range_maximum = 10000
hourly_pay_range_minimum = 6
hourly_pay_range_maximum = 500
if self.pay_type is 'annual':
pay_range_minimum = annual_pay_range_minimum
pay_range_maximum = annual_pay_range_maximum
elif self.pay_type is 'daily':
pay_range_minimum = daily_pay_range_minimum
pay_range_maximum = daily_pay_range_maximum
elif self.pay_type is 'hourly':
pay_range_minimum = hourly_pay_range_minimum
pay_range_maximum = hourly_pay_range_maximum
if (self.pay_range.lower < pay_range_minimum) or (self.pay_range.upper > pay_range_maximum):
raise ValidationError({
'pay_range': ValidationError(
_('%(pay_type)s Pay must be between %(pay_range_minimum)s and %(pay_range_maximum)s'),
code='invalid',
params={
'pay_type': self.pay_type,
'pay_range_minimum': pay_range_minimum,
'pay_range_maximum': pay_range_maximum,
},
)
})
你不能用字段验证器来验证。相反,在模型上定义^{} 方法来检查字段值,并在需要时引发ValidationError。你知道吗
相关问题 更多 >
编程相关推荐