Guest User

Untitled

a guest
Nov 16th, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. class DirectDebitForm(forms.ModelForm):
  2. terms_and_conditions = forms.BooleanField(label="Tick here to confirm you accept the Terms and Conditions")
  3. # overriding model field as need number validation before clean() invoked
  4. account_number = forms.CharField(min_length=8, max_length=8, label='Account Number (8 digits)',
  5. validators=[RegexValidator(r'^[0-9]{8}')], # making only numbers valid
  6. error_messages={
  7. 'invalid': 'Your account number should be 8 digits with no spaces or letters.'})
  8. sort_code = forms.CharField(min_length=6, max_length=6, label='Sort Code (6 digits)',
  9. validators=[RegexValidator(r'^[0-9]{6}')], # making only numbers valid
  10. error_messages={
  11. 'invalid': 'Your sort code should be 6 digits without dashes or spaces'})
  12.  
  13. def __init__(self, session, my_quote, *args, **kwargs):
  14. super().__init__(*args, **kwargs)
  15. ......
  16.  
  17. def clean(self):
  18. cleaned_data = super().clean()
  19. account_number = cleaned_data.get('account_number')
  20. sort_code = cleaned_data.get('sort_code')
  21. if account_number and sort_code:
  22. # validation via external api
  23. error, bank_name = get_bank_validation(account_number, sort_code)
  24. cleaned_data['bank'] = bank_name
  25. if error:
  26. if error == 'no-branch-found':
  27. self.add_error('sort_code', 'No bank could be found for that sort code. Please check.')
  28. elif error == 'account-number-invalid':
  29. self.add_error('account_number',
  30. 'Invalid account number. Please check your account number and sort code.')
  31. else:
  32. raise forms.ValidationError("The account number and sort code are not valid. Please check.")
  33.  
  34. class Meta:
  35. model = DirectDebit
  36. fields = ['account_name', 'account_number', 'sort_code', 'bank']
Add Comment
Please, Sign In to add comment