Ich versuche, Pay in einem Djando-Modell zu verfolgen, aber dies könnte jährlich, täglich oder stündlich sein, so dass Werte für RangeMinValueValidator
und RangeMaxValueValidator
von pay_type
abhängen sollten, aber ich bin mir nicht sicher, wie dies zu tun ist. Was ich habe, so weit:Wie kann ich in einem Django-Modell Werte für Django-Validierer basierend auf einem anderen Feld festlegen?
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:
Das fühlt sich ziemlich chaotisch, aber so weit, nach Daniel Roseman Kommentar:
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,
},
)
})
Danke, ich habe einen Versuch zusammen in der Frage gestellt, obwohl es einen aufgeräumteren Weg geben muss, es zu tun. Muss clean() in save() aufgerufen werden, wenn es bei jedem Speichern ausgeführt werden soll? – StringsOnFire
Ich rufe clean() in einer pre_save-Methode auf. – StringsOnFire