from django import forms from django.core import validators from module_project import constants from module_iam.models import IAmPrincipal class LoginForm(forms.Form): email = forms.EmailField( max_length=254, widget=forms.TextInput(attrs={"autofocus": True}), label="Email", ) password = forms.CharField( label="Password", strip=False, widget=forms.PasswordInput() ) class UserForm(forms.ModelForm): password = forms.CharField( widget=forms.PasswordInput(attrs={"autocomplete": "off"}), validators=[ validators.MinLengthValidator( limit_value=6, message="Password must be at least 6 characters long. " ) ], ) confirm_password = forms.CharField( widget=forms.PasswordInput(attrs={"autocomplete": "off"}) ) class Meta: model = IAmPrincipal fields = [ "first_name", "email", "password", "confirm_password", ] labels = { "first_name": "Name", } def clean_email(self): email = self.cleaned_data.get('email') if IAmPrincipal.objects.filter(email=email).exists(): raise forms.ValidationError("This email address is already in use.") return email def clean(self): cleaned_data = super().clean() password = cleaned_data.get("password") confirm_password = cleaned_data.get("confirm_password") if password and confirm_password and password != confirm_password: self.add_error("confirm_password", "Passwords do not match.") return cleaned_data def save(self, commit=True): instance = super().save(commit=False) # Check if it's a new object (create action) or an existing one (update action) if not instance.pk: # pk is None for new objects instance.username = self.cleaned_data["email"] instance.set_password(self.cleaned_data["password"]) if commit: instance.save() return instance