2016-07-17 2 views
0

Djando 모델에서 임금을 추적하려고합니다. 그러나 연간, 매일 또는 매시간 일 수 있으므로 RangeMinValueValidatorRangeMaxValueValidator의 값은 pay_type에 달려 있지만이 방법은 잘 모르겠습니다. 내가 지금까지 가지고 :Django 모델에서 다른 필드를 기반으로 장고 유효성 검사기의 값을 설정하는 방법은 무엇입니까?

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) 

편집 :

이 다니엘 Roseman의 의견에 따라 지금까지 매우 지저분한 느낌이 있지만 :

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

당신이 할 수있는 필드 유효성 검사기와 . 대신 모델에서 clean 메서드를 정의하여 필드 값을 확인하고 필요한 경우 ValidationError를 발생시킵니다.

+0

감사합니다. 질문을 시도해 보았습니다.하지만 할 수있는 방법이 있어야합니다. clean()은 각 save에서 실행되기를 원하면 save()에서 호출되어야합니까? – StringsOnFire

+0

pre_save 메서드에서 clean()을 호출하고 있습니다. – StringsOnFire