在Django模型中,如何根据另一个字段为Django验证器设置值?

时间:2016-07-17 10:18:01

标签: python django django-models django-validation

我正在尝试跟踪Djando模型中的付费,但这可能是年度,每日或每小时,因此RangeMinValueValidatorRangeMaxValueValidator的值应取决于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,
                },
            )
        })

1 个答案:

答案 0 :(得分:1)

您无法使用字段验证程序执行此操作。相反,在模型上定义clean方法以检查字段值,并在需要时引发ValidationError。