Admin站点管理
一、配置admin应用
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
]
二、创建管理员用户
命令:
python3 manage.py createsuperuser
一次输入 用户名 邮箱 密码
三、汉化 (配置中国时区)
settings.py
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
四、models 模型
from django.db import models
# Create your models here.
# Create your models here.
# 用户表
class User(models.Model):
username = models.CharField(max_length=20,db_index=True,default='lucky',verbose_name='用户名')
sex = models.BooleanField(default=True,verbose_name='性别')
age = models.IntegerField(default=18,verbose_name='年龄')
info = models.CharField(max_length=20,default='我是帅气的lucky老师',verbose_name='简介')
createtime = models.DateTimeField(auto_now_add=True,verbose_name='加入时间')
def __str__(self):
return self.username
class Meta:
db_table = 'user'
# 创建博客模型
class Posts(models.Model):
title = models.CharField(max_length=20,default='标题',verbose_name='标题')
article = models.CharField(max_length=200,default='博客内容',verbose_name='博客内容')
createTime = models.DateTimeField(auto_now_add=True,verbose_name='发表时间')
users = models.ForeignKey(User,verbose_name='用户')
def __str__(self):
return self.title
class Meta:
db_table = 'posts'
五、修改admin.py文件 配置后台显示页面
from django.contrib import admin
from .models import User,Posts # 导入当前User模型
# 注册模型
admin.site.register(User)
admin.site.register(Posts)
六、配置后台用户和博客模型类的页面的显示
user模型的配置
# 配置后台页面显示
# 使用注册器完成注册
class UserAdmin(admin.ModelAdmin):
# 性别显示成男女
def my_sex(self):
if self.sex:
return '男'
else:
return '女'
my_sex.short_description = '性别'
# 显示字段
list_display = ['pk', 'username', my_sex, 'age', 'info', 'createtime']
# 过滤字段
list_filter = ['username']
# 搜索字段
search_fields = ['username']
# 分页
list_per_page = 5
# 添加修改数据的时候 调整属性顺序
# fields = ['username','info','age']
# 添加修改时候 进行分组显示 不能跟上一个fields一同出现
fieldsets = [
('第一组', {'fields': ['username', 'info']}),
('第二组', {'fields': ['age', 'sex']})
]
# 更改动作框上下的位置
actions_on_top = True
actions_on_bottom = False
admin.site.register(User,UserAdmin)
posts模型的配置
class PostsAdmin(admin.ModelAdmin):
# 显示字段
list_display = ['title','article','createTime','users']
# 过滤字段
list_filter = ['title']
# 分页
list_per_page = 3
# 搜索字段
search_fields = ['title']
admin.site.register(Posts,PostsAdmin)
七、关联对象
需求:
在创建用户的时候 喜欢不添加几篇博客
# class PostsInfo(admin.TabularInline): # 横着显示添加博客的界面
class PostsInfo(admin.StackedInline): # 竖着显示添加博客的界面
model = Posts
extra = 2 # 创建用户的时候 添加俩个博客
# Register your models here.
# 配置后台页面显示
# 使用注册器完成注册
class UserAdmin(admin.ModelAdmin):
inlines = [PostsInfo]
...
八、使用装饰器完成注册
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
...
@admin.register(Posts)
class PostsAdmin(admin.ModelAdmin):
...
# 注册模型
# admin.site.register(User, UserAdmin)
# admin.site.register(Posts)
九、完整的代码
from django.contrib import admin
from .models import User,Posts # 导入当前User模型
# class PostsInfo(admin.TabularInline): # 横着显示添加博客的界面
class PostsInfo(admin.StackedInline): # 竖着显示添加博客的界面
model = Posts
extra = 2 # 创建用户的时候 添加俩个博客
# Register your models here.
# 配置后台页面显示
# 使用注册器完成注册
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
inlines = [PostsInfo]
# 性别显示成男女
def my_sex(self):
if self.sex:
return '男'
else:
return '女'
my_sex.short_description = '性别'
# 显示字段
list_display = ['pk', 'username', my_sex, 'age', 'info', 'createtime']
# 过滤字段
list_filter = ['username']
# 搜索字段
search_fields = ['username']
# 分页
list_per_page = 5
# 添加修改数据的时候 调整属性顺序
# fields = ['username','info','age']
# 添加修改时候 进行分组显示 不能跟上一个fields一同出现
fieldsets = [
('第一组', {'fields': ['username', 'info']}),
('第二组', {'fields': ['age', 'sex']})
]
# 更改动作框上下的位置
actions_on_top = True
actions_on_bottom = False
@admin.register(Posts)
class PostsAdmin(admin.ModelAdmin):
# 显示字段
list_display = ['title','article','createTime','users']
# 过滤字段
list_filter = ['title']
# 分页
list_per_page = 3
# 搜索字段
search_fields = ['title']
# 注册模型
# admin.site.register(User, UserAdmin)
# admin.site.register(Posts)