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): #lht: 创建用户表单,用于在Django管理后台创建新用户 #lht: 密码输入字段 password1 = forms.CharField(label=_('password'), widget=forms.PasswordInput) #lht: 确认密码输入字段 password2 = forms.CharField(label=_('Enter password again'), widget=forms.PasswordInput) class Meta: #lht: 指定关联的模型和字段 model = BlogUser fields = ('email',) def clean_password2(self): #lht: 验证两次密码输入是否一致 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): #lht: 保存用户并加密密码 user = super().save(commit=False) user.set_password(self.cleaned_data["password1"]) if commit: #lht: 设置用户来源为管理后台 user.source = 'adminsite' user.save() return user class BlogUserChangeForm(UserChangeForm): #lht: 修改用户表单,用于在Django管理后台编辑现有用户 class Meta: #lht: 指定关联的模型、字段和字段类 model = BlogUser fields = '__all__' field_classes = {'username': UsernameField} def __init__(self, *args, **kwargs): #lht: 初始化表单 super().__init__(*args, **kwargs) class BlogUserAdmin(UserAdmin): #lht: 用户管理界面配置,自定义Django管理后台的用户管理界面 #lht: 指定修改用户和创建用户使用的表单 form = BlogUserChangeForm add_form = BlogUserCreationForm #lht: 定义在列表页面显示的字段 list_display = ( 'id', 'nickname', 'username', 'email', 'last_login', 'date_joined', 'source') #lht: 定义在列表页面中可点击跳转到编辑页面的字段 list_display_links = ('id', 'username') #lht: 定义默认排序方式 ordering = ('-id',)