| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- from django import forms
- from django.contrib.auth.forms import UserCreationForm, UserChangeForm
- from django.core.exceptions import ValidationError
- from .models import ReyMotaUser
- from accounts.models import InvitationCode
- class ReyMotaUserCreationForm(UserCreationForm):
- invitation_code = forms.CharField(
- max_length=32,
- label="Código de Invitación",
- help_text="Introduce el código que has recibido"
- )
- class Meta:
- model = ReyMotaUser
- fields = ("email", "nombre", "foto", "invitation_code")
- labels = {'email': 'Dirección de correo'}
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- code = self.initial.get('invitation_code')
- if code:
- self.fields['invitation_code'].initial = code
- def clean_invitation_code(self):
- code = self.cleaned_data.get('invitation_code')
- if not code:
- raise ValidationError("El código de invitación es obligatorio.")
- try:
- invitation = InvitationCode.objects.get(code=code)
- if not invitation.is_valid():
- if invitation.is_used:
- raise ValidationError("Este código ya ha sido utilizado.")
- else:
- raise ValidationError("El código ha expirado.")
- except InvitationCode.DoesNotExist:
- raise ValidationError("El código no es válido.")
- return code
- def save(self, commit=True):
- user = super().save(commit=False)
- if commit:
- user.save()
- code = self.cleaned_data.get('invitation_code')
- invitation = InvitationCode.objects.get(code=code)
- invitation.mark_as_used(user)
- return user
- class ReyMotaUserChangeForm(UserChangeForm):
- class Meta:
- model = ReyMotaUser
- fields = ("email", "foto")
|