from django import forms from django.contrib import admin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.contrib.auth.forms import ReadOnlyPasswordHashField from django.contrib.auth.models import Group from .models import Team, TeamUser class TeamUserCreationForm(forms.ModelForm): password1 = forms.CharField(label="Password", widget=forms.PasswordInput) password2 = forms.CharField(label="Password confirmation", widget=forms.PasswordInput) class Meta: model = TeamUser fields = ("email",) def clean_password2(self): "Check that the two password entries match" password1 = self.cleaned_data.get("password1") password2 = self.cleaned_data.get("password2") if password1 and password2 and password1 != password2: raise ValueError("Passwords don't match") return password2 def save(self, commit=True): # Save the provided password in hashed format user = super().save(commit=False) user.set_password(self.cleaned_data["password1"]) if commit: user.save() return user class TeamUserChangeForm(forms.ModelForm): """A form for updating users. Includes all the fields on the user, but replaces the password field with admin's disabled password hash display field. """ password = ReadOnlyPasswordHashField() class Meta: model = TeamUser fields = ( "email", "password", "first_name", "last_name", "is_active", "is_admin", ) class TeamUserAdmin(BaseUserAdmin): form = TeamUserChangeForm add_form = TeamUserCreationForm list_display = ("email", "first_name", "last_name", "designation", "is_admin") list_filter = ("is_admin",) fieldsets = ( (None, {"fields": ("email", "password")}), ( "Personal info", { "fields": ( "first_name", "last_name", "designation", "dapsy", "team", "lead_for", ) }, ), ("Permissions", {"fields": ("is_admin",)}), ) add_fieldsets = ( ( None, { "classes": ("wide",), "fields": ( "email", "first_name", "last_name", "password1", "password2", ), }, ), ) search_fields = ("email",) ordering = ("email",) filer_horizontal = () admin.site.register(TeamUser, TeamUserAdmin) admin.site.register(Team) admin.site.unregister(Group)