前言
利用Django开发的小项目,想扩展默认的user表,添加一些自定义字段。记录这个过程。
创建应用
python manage.py startapp users
注册
修改settings.py
INSTALLED_APPS = [
'simpleui', #放到第一行
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
'users',
]
自定义字段
models.py
在users文件夹下的models.py中定义扩展字段
from django.db import models
# Create your models here.
from django.contrib.auth.models import User
#用户类
class UserProfile(models.Model):
"""
用户类扩展字段
"""
owner = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name = '用户')
nike_name = models.CharField('昵称', max_length=50, blank=True, default='')
privtekey = models.DateField('密钥', null=True, blank=True)
class Meta:
verbose_name = '用户资料'
verbose_name_plural = verbose_name
def __str__(self):
return self.owner.username
admin.py
修改后台展示
from django.contrib import admin
# 首先引入User
from django.contrib.auth.models import User
# 我们看到的这个用户选项就是官方默认通过UserAdmin这个类注册到后台的,那么我们也引入进来,后边继承这个类
from django.contrib.auth.admin import UserAdmin
# 再引入我们定义的模型
from .models import UserProfile
# 必须先通过unregister将User取消注册
admin.site.unregister(User)
# 定义关联对象的样式,StackedInline为纵向排列每一行,TabularInline为并排排列
class UserProfileInline(admin.StackedInline):
model = UserProfile # 关联的模型
# 关联字段在User之内编辑,关联进来
class UserProfileAdmin(UserAdmin):
inlines = [UserProfileInline]
# 重新注册User
admin.site.register(User, UserProfileAdmin)
跟新
python manage.py makemigrations
python manage.py migrate
评论 (0)