forms.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django import forms
  2. from django.contrib.auth.forms import UserCreationForm, UserChangeForm
  3. from django.core.exceptions import ValidationError
  4. from .models import ReyMotaUser
  5. from accounts.models import InvitationCode
  6. class ReyMotaUserCreationForm(UserCreationForm):
  7. invitation_code = forms.CharField(
  8. max_length=32,
  9. label="Código de Invitación",
  10. help_text="Introduce el código que has recibido"
  11. )
  12. class Meta:
  13. model = ReyMotaUser
  14. fields = ("email", "nombre", "foto", "invitation_code")
  15. labels = {'email': 'Dirección de correo'}
  16. def __init__(self, *args, **kwargs):
  17. super().__init__(*args, **kwargs)
  18. code = self.initial.get('invitation_code')
  19. if code:
  20. self.fields['invitation_code'].initial = code
  21. def clean_invitation_code(self):
  22. code = self.cleaned_data.get('invitation_code')
  23. if not code:
  24. raise ValidationError("El código de invitación es obligatorio.")
  25. try:
  26. invitation = InvitationCode.objects.get(code=code)
  27. if not invitation.is_valid():
  28. if invitation.is_used:
  29. raise ValidationError("Este código ya ha sido utilizado.")
  30. else:
  31. raise ValidationError("El código ha expirado.")
  32. except InvitationCode.DoesNotExist:
  33. raise ValidationError("El código no es válido.")
  34. return code
  35. def save(self, commit=True):
  36. user = super().save(commit=False)
  37. if commit:
  38. user.save()
  39. code = self.cleaned_data.get('invitation_code')
  40. invitation = InvitationCode.objects.get(code=code)
  41. invitation.mark_as_used(user)
  42. return user
  43. class ReyMotaUserChangeForm(UserChangeForm):
  44. class Meta:
  45. model = ReyMotaUser
  46. fields = ("email", "foto")