新建accounts应用
python3 manage.py startapp accounts
创建models.py
# accounts/models.pyfrom django.db import modelsfrom django.contrib.auth.models import AbstractUserclass MyUser(AbstractUser):"""自定义用户模型类"""mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')# default为函数,如dict, list, tuple等dbs = models.JSONField(verbose_name='我的数据库', default=list)class Meta:db_table = 'my_auth_user'verbose_name = 'user'verbose_name_plural = 'users'
配置settings.py
# proj/settings.py# 安装应用INSTALLED_APPS += ['accounts']# 覆盖认证模型,注意不是accounts.models.MyUserAUTH_USER_MODEL = 'accounts.MyUser'
使用MyUser
from accounts.models import MyUser# 修改用户信息u = MyUser.objects.get(username='admin')u.mobile = '13812345678'u.save()# 新增用户new_user = MyUser()new_user.username = 'demo01'new_user.set_password('123456')
配置admin
# accounts/admin.pyfrom django.contrib import adminfrom django.contrib.auth.admin import UserAdminfrom django.contrib.auth.models import Groupfrom .models import MyUserfrom .forms import CustomUserCreationFormADDITIONAL_USER_FIELDS = ((None, {'fields': ('email', 'mobile', 'dbs')}),)class CustomUserAdmin(UserAdmin):model = MyUseradd_form = CustomUserCreationFormlist_display = ['username', 'email', 'mobile', 'dbs']add_fieldsets = UserAdmin.add_fieldsets + ADDITIONAL_USER_FIELDSadmin.site.register(MyUser, CustomUserAdmin)# admin.site.unregister(Group)
# accounts/forms.pyfrom django.contrib.auth.forms import UserCreationForm, UserChangeFormfrom django import formsfrom accounts.models import MyUserclass CustomUserCreationForm(UserCreationForm):# username = forms.CharField(label='用户名')# password1 = forms.CharField(label='密码', widget=forms.PasswordInput)# password2 = forms.CharField(label='确认密码', widget=forms.PasswordInput)# email = forms.EmailField(label='邮箱地址', required=False)# mobile = forms.CharField(label='手机号', required=False)# dbs = forms.JSONField(label='数据库', required=False)class Meta(UserCreationForm.Meta):model = MyUserfields = ('username', 'email', 'mobile', 'dbs')def save(self, commit=True):user = super().save(commit=False)user.email = self.cleaned_data["email"]user.mobile = self.cleaned_data["mobile"]user.dbs = self.cleaned_data["dbs"]if commit:user.save()return user
