| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- # forms.py
- from django import forms
- from django.contrib.auth.forms import AuthenticationForm
- from django.contrib.auth.forms import UserCreationForm
- from django.contrib.auth.models import User
- from .models import UserProfile
- class CustomLoginForm(AuthenticationForm):
- username = forms.CharField(widget=forms.TextInput(attrs={
- 'placeholder': 'Username'
- }))
- password = forms.CharField(widget=forms.PasswordInput(attrs={
- 'placeholder': 'Password'
- }))
- # forms.py
- class CustomUserCreationForm(UserCreationForm):
- class Meta:
- model = User
- fields = ['username', 'email', 'password1', 'password2']
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.fields['username'].widget.attrs.update({
- 'placeholder': 'Username'
- })
- self.fields['email'].widget.attrs.update({
- 'placeholder': 'Email'
- })
- self.fields['password1'].widget.attrs.update({
- 'placeholder': 'Password'
- })
- self.fields['password2'].widget.attrs.update({
- 'placeholder': 'Confirm Password'
- })
- class UserProfileForm(forms.ModelForm):
- class Meta:
- model = UserProfile
- fields = ['profile_picture', 'position', 'signed_picture'] # Include the fields you want to manage
- class UserCustomForm(forms.ModelForm):
- # Profile fields
- profile_picture = forms.ImageField(required=False, label="Profile Picture")
- signed_picture = forms.ImageField(required=False, label="Signed Picture")
- position = forms.ChoiceField(
- choices=UserProfile.POSITION_CHOICES,
- required=False,
- label="Position"
- )
- class Meta:
- model = User
- fields = [
- "first_name",
- "last_name",
- "is_staff",
- "is_superuser",
- "is_active",
- ]
- def __init__(self, *args, **kwargs):
- # Allow passing `instance` to access both User and UserProfile objects
- user_instance = kwargs.pop('instance', None)
- profile_instance = getattr(user_instance, 'profile', None)
- super().__init__(instance=user_instance, *args, **kwargs)
- # Populate initial data for profile fields if `profile` exists
- if profile_instance:
- self.fields['profile_picture'].initial = profile_instance.profile_picture
- self.fields['signed_picture'].initial = profile_instance.signed_picture
- self.fields['position'].initial = profile_instance.position
- def save(self, commit=True):
- # Save the User instance first
- user = super().save(commit=commit)
- profile_data = {
- 'profile_picture': self.cleaned_data.get('profile_picture'),
- 'signed_picture': self.cleaned_data.get('signed_picture'),
- 'position': self.cleaned_data.get('position'),
- }
- # Ensure profile exists for the user
- profile, created = UserProfile.objects.get_or_create(user=user)
- for key, value in profile_data.items():
- setattr(profile, key, value)
- if commit:
- profile.save()
- return user
|