Django_Basic_Manufacturing/users/forms.py
2025-08-17 21:42:40 +07:00

97 lines
3.6 KiB
Python

from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth import get_user_model
from .models import UserGroup
User = get_user_model()
class CustomUserCreationForm(UserCreationForm):
"""Form for creating new users"""
class Meta(UserCreationForm.Meta):
model = User
fields = ('username', 'email', 'first_name', 'last_name', 'user_type',
'department', 'employee_id', 'phone')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Make password fields required
self.fields['password1'].required = True
self.fields['password2'].required = True
# Add Bootstrap classes
for field in self.fields.values():
field.widget.attrs.update({'class': 'form-control'})
class CustomUserForm(UserChangeForm):
"""Form for editing existing users"""
class Meta:
model = User
fields = ('username', 'email', 'first_name', 'last_name', 'user_type',
'department', 'employee_id', 'phone', 'is_active', 'groups')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Remove password field from edit form
if 'password' in self.fields:
del self.fields['password']
# Add Bootstrap classes
for field in self.fields.values():
if isinstance(field.widget, forms.CheckboxInput):
field.widget.attrs.update({'class': 'form-check-input'})
else:
field.widget.attrs.update({'class': 'form-control'})
class UserGroupForm(forms.ModelForm):
"""Form for user groups"""
class Meta:
model = UserGroup
fields = ('name', 'description', 'users', 'permissions')
widgets = {
'description': forms.Textarea(attrs={'rows': 3}),
'permissions': forms.Textarea(attrs={'rows': 5, 'placeholder': 'Enter JSON permissions'}),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Add Bootstrap classes
for field in self.fields.values():
if isinstance(field.widget, forms.CheckboxSelectMultiple):
field.widget.attrs.update({'class': 'form-check-input'})
elif isinstance(field.widget, forms.SelectMultiple):
field.widget.attrs.update({'class': 'form-select'})
else:
field.widget.attrs.update({'class': 'form-control'})
def clean_permissions(self):
"""Validate permissions JSON field"""
permissions = self.cleaned_data.get('permissions')
if permissions:
try:
import json
if isinstance(permissions, str):
json.loads(permissions)
return permissions
except json.JSONDecodeError:
raise forms.ValidationError("Invalid JSON format for permissions")
return permissions
class ProfileEditForm(forms.ModelForm):
"""Form for editing user profile"""
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'phone', 'department', 'profile_picture')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Add Bootstrap classes
for field in self.fields.values():
if isinstance(field.widget, forms.FileInput):
field.widget.attrs.update({'class': 'form-control'})
else:
field.widget.attrs.update({'class': 'form-control'})