2016-07-17 7 views
0

私はDjandoモデルで支払いを追跡しようとしていますが、毎年、毎月、または毎時である可能性がありますので、RangeMinValueValidatorRangeMaxValueValidatorの値はpay_typeに依存するはずです。私はこれまで持っている:Djangoモデルでは、別のフィールドに基づいて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) 

はEDIT:

これはかなり厄介に感じ、これまでのところ、ダニエルローズマンさんのコメント次

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

ありがとうございます、私は質問に一緒に試みてきましたが、それを行うにはちょっとした方法が必要です。 save()でsave()を呼び出す必要がある場合はclean()を呼び出す必要がありますか? – StringsOnFire

+0

私はpre_saveメソッドでclean()を呼び出しています。 – StringsOnFire

関連する問題