通过继承AbstractUser来拓展user表的字段
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
isProject = models.BooleanField(verbose_name="项目权限", db_column='is_project', default=0)
class Meta:
db_table = 'user'
verbose_name = "用户"
verbose_name_plural = '用户管理'
class UserDeserializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
def create(self, validated_data):
register_info = {
'username': validated_data.get('username'),
'password': validated_data.get('password'),
'isProject': validated_data.get('isProject', 0),
'email':validated_data.get('email')
}
user = User.objects.create_user(**register_info)
user.save()
return user
如果想要通过反序列化来创建用户,那么一定要重写create()方法,不然创建的密码是明文的,是无法登录成功的。
使用了user拓展之后,django的后台会无法看到原来的用户添加功能
需要在admin.py文件中重新注册
admin.site.register(User)
然后又会出现新的问题,如果使用后台去添加用户,用户的密码是明文的。
from django.contrib.auth.admin import UserAdmin
admin.site.register(User, UserAdmin)
通过这样注册可以让添加用户的密码是加密的,但是修改用户时,拓展的字段看不见了。
from django.contrib import admin
from .models import User
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy
class UserProfileAdmin(UserAdmin):
list_display = ('username', 'last_login', 'is_superuser', 'is_staff', 'is_active', 'date_joined')
fieldsets = (
(None, {'fields': ('username', 'password', 'first_name', 'last_name', 'email')}),
(gettext_lazy('User Information'), {'fields': ('isProject',)}),
(gettext_lazy('Permissions'), {'fields': ('is_superuser', 'is_staff', 'is_active',
'groups', 'user_permissions')}),
(gettext_lazy('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
admin.site.register(User, UserAdmin)
通过继承UserAdmin,然后添加拓展的字段。