from django.contrib import admin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.contrib.auth.models import User from django.contrib.auth.hashers import make_password from django import forms from .models import Account class AccountInlineForm(forms.ModelForm): hashed_email_set = forms.EmailField(label='Set hashed email address', required=False) hashed_email_clear = forms.BooleanField(label='Clear hashed email address', required=False) class Meta: model = Account fields = ['hashed_email'] def save(self, commit): if len(self.cleaned_data['hashed_email_set']) > 0: self.instance.set_hashed_email( self.cleaned_data['hashed_email_set'] ) elif self.cleaned_data['hashed_email_clear']: self.instance.hashed_email = '' return super().save(commit) class AccountInline(admin.StackedInline): model = Account can_delete = False form = AccountInlineForm readonly_fields = ['hashed_email'] class UserAdmin(BaseUserAdmin): inlines = (AccountInline,) admin.site.unregister(User) admin.site.register(User, UserAdmin) admin.site.register(Account)