Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class DirectDebitForm(forms.ModelForm):
- terms_and_conditions = forms.BooleanField(label="Tick here to confirm you accept the Terms and Conditions")
- # overriding model field as need number validation before clean() invoked
- account_number = forms.CharField(min_length=8, max_length=8, label='Account Number (8 digits)',
- validators=[RegexValidator(r'^[0-9]{8}')], # making only numbers valid
- error_messages={
- 'invalid': 'Your account number should be 8 digits with no spaces or letters.'})
- sort_code = forms.CharField(min_length=6, max_length=6, label='Sort Code (6 digits)',
- validators=[RegexValidator(r'^[0-9]{6}')], # making only numbers valid
- error_messages={
- 'invalid': 'Your sort code should be 6 digits without dashes or spaces'})
- def __init__(self, session, my_quote, *args, **kwargs):
- super().__init__(*args, **kwargs)
- ......
- def clean(self):
- cleaned_data = super().clean()
- account_number = cleaned_data.get('account_number')
- sort_code = cleaned_data.get('sort_code')
- if account_number and sort_code:
- # validation via external api
- error, bank_name = get_bank_validation(account_number, sort_code)
- cleaned_data['bank'] = bank_name
- if error:
- if error == 'no-branch-found':
- self.add_error('sort_code', 'No bank could be found for that sort code. Please check.')
- elif error == 'account-number-invalid':
- self.add_error('account_number',
- 'Invalid account number. Please check your account number and sort code.')
- else:
- raise forms.ValidationError("The account number and sort code are not valid. Please check.")
- class Meta:
- model = DirectDebit
- fields = ['account_name', 'account_number', 'sort_code', 'bank']
Add Comment
Please, Sign In to add comment