from django import forms from django.contrib.auth.admin import UserAdmin from django.contrib.auth.forms import UserChangeForm from django.contrib.auth.forms import UsernameField from django.utils.translation import gettext_lazy as _ # Register your models here. from .models import BlogUser class BlogUserCreationForm(forms.ModelForm): #sjt 后台创建用户表单:处理密码设置和验证 password1 = forms.CharField(label=_('password'), widget=forms.PasswordInput) # sjt 密码字段 password2 = forms.CharField(label=_('Enter password again'), widget=forms.PasswordInput) # sjt 确认密码字段 class Meta: model = BlogUser # sjt 关联BlogUser模型 fields = ('email',) # sjt 表单包含的字段 def clean_password2(self): #sjt 验证两次输入密码一致性 password1 = self.cleaned_data.get("password1") password2 = self.cleaned_data.get("password2") if password1 and password2 and password1 != password2: raise forms.ValidationError(_("passwords do not match")) return password2 def save(self, commit=True): #sjt 保存用户:加密密码并标记来源为后台 user = super().save(commit=False) user.set_password(self.cleaned_data["password1"]) # sjt 加密密码 if commit: user.source = 'adminsite' # sjt 标记来源为后台添加 user.save() return user class BlogUserChangeForm(UserChangeForm): #sjt 后台修改用户表单:配置修改用户的字段 class Meta: model = BlogUser # sjt 关联BlogUser模型 fields = '__all__' # sjt 包含所有字段 field_classes = {'username': UsernameField} # sjt 用户名字段类 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) class BlogUserAdmin(UserAdmin): #sjt Admin后台用户管理配置:定义显示和操作方式 form = BlogUserChangeForm # sjt 修改用户表单 add_form = BlogUserCreationForm # sjt 创建用户表单 list_display = ( # sjt 列表页显示的字段 'id', 'nickname', 'username', 'email', 'last_login', 'date_joined', 'source') list_display_links = ('id', 'username') # sjt 列表页可点击的链接字段 ordering = ('-id',) # sjt 按ID倒序排列 search_fields = ('username', 'nickname', 'email') # sjt 搜索字段