Django建教育平台(五)--各app的model注册
2017-08-10 06:52
435 查看
上一节讲解了xadmin的安装, 这一节讲各app的model注册到xadmin中.
1. Users app的model注册
a. 新建adminx.py文件
users文件夹右击--New--Python File, 命名为adminx.py. 这样xadmin会自动搜索各app下名为adminx的文件作为admin配置文件.
以下是新建adminx.py后代码区自动生成的代码.
--->插播
作者和日期是在settings中的file and code templates中设置的, 如下图所示.
插播结束<---
b. 配置adminx.py
c. 浏览器验证
"邮箱验证码"这几个字已经出现在左边.
为什么是邮箱验证码这几个字呢, 原因是models中的verbose name有设定.
点击页面右侧的+增加 邮箱验证码
点击后显示页面如下:
可以看到有两个字段用英文显示, 为何呢? 原因这两个字段没有设置verbose name.
在models中对这两个字段设置verbose name.
修改后刷新页面, 这两个字段已经变成中文.
d. 增加验证码
按下图填写好内容之后, 点击保存.
点击保存后回到xadmin主页, 显示修改成功.
但是邮箱验证码的记录显示"EmailVerifyRecord object", 并不能显示更能识别记录本身的内容.
e. models中重写__unicode__方法
刷新浏览器, 发现邮箱验证码的记录仍然没有变化.
百度到一个解释, django对python2支持__unicode__方法, 但对Python3只支持__str__方法.
果断将__unicode__方法换成__str__方法.
代码中也出现了重写的标记了, __unicode__方法是没有出现的!
刷新网页, 成功了!
2. 自定义显示列
现在邮箱验证码列表中只有一列, 能否增加几列呢? 如下图所示.
在users/adminx中修改代码
浏览器刷新后得到
3. 增加各字段搜索框
users/adminx中修改代码
刷新浏览器后, 增加了搜索框.
4. 增加筛选按钮
修改users/adminx代码
刷新浏览器后
试用一下过滤器, 看起来很强大
5. 注册users model中的Banner
在adminx中增加以下代码
6. 注册其他model
a. 注册course model
在course文件夹下新建一个adminx.py文件, 输入以下代码:
b. 注意外键
新建了1个课程"课程1", 接着新建章节时发现问题, 章节的字段课程是外键, 显示的是Course object, 显示不出来课程名.
解决方法是在cource model中设置__str__方法.
注意到Lesson也被Video和CourseResource引用作外键, 故也添加__str__方法.
c. 注册organization
在其文件夹下新建adminx.py
输入代码
d. 注册operation
在其文件夹下新建adminx.py
输入代码
7. xadmin全局设置
a. 设置皮肤主题
在users/adminx中增加以下代码
浏览器效果:
b. 修改xadmin抬头和页脚
继续在users/adminx增加代码:
class GlobalSettings(object):
site_title = "黄光部在线后台"
site_footer = "黄光部在线"
menu_style = "accordion" # 将各app的model折叠起来
xadmin.site.register(views.CommAdminView, GlobalSettings) # 注册全局设定
浏览器效果:
c. 将左侧app名字改为中文
以users app为例, 增加users/apps中代码
class UsersConfig(AppConfig):
name = 'users'
verbose_name = "用户" # 新增别名
增加users/__ini__代码
default_app_config = "users.apps.UsersConfig"
同样的, 其他app的做法也一样, 只是__ini__文件中代码要依不同app名字而修改, 如courses的__ini__中应该写成:
default_app_config = "courses.apps.CoursesConfig"
浏览器效果
1. Users app的model注册
a. 新建adminx.py文件
users文件夹右击--New--Python File, 命名为adminx.py. 这样xadmin会自动搜索各app下名为adminx的文件作为admin配置文件.
以下是新建adminx.py后代码区自动生成的代码.
--->插播
作者和日期是在settings中的file and code templates中设置的, 如下图所示.
插播结束<---
b. 配置adminx.py
__author__ = 'Elvan' __date__ = '2017/8/6 20:25' import xadmin from .models import EmailVerifyRecord class EmailVerifyRecordAdmin(object): pass xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
c. 浏览器验证
"邮箱验证码"这几个字已经出现在左边.
为什么是邮箱验证码这几个字呢, 原因是models中的verbose name有设定.
点击页面右侧的+增加 邮箱验证码
点击后显示页面如下:
可以看到有两个字段用英文显示, 为何呢? 原因这两个字段没有设置verbose name.
在models中对这两个字段设置verbose name.
class EmailVerifyRecord(models.Model): # 邮箱验证码功能 code = models.CharField(max_length=20, verbose_name="验证码") email = models.EmailField(max_length=50, verbose_name="邮箱") send_type = models.CharField(choices=(("register", "注册"), ("forget", "找回密码")), max_length=10, verbose_name="发送类型") # 增加verbose name send_time = models.DateTimeField(default=datetime.now, verbose_name="发送时间") # 增加verbose name
修改后刷新页面, 这两个字段已经变成中文.
d. 增加验证码
按下图填写好内容之后, 点击保存.
点击保存后回到xadmin主页, 显示修改成功.
但是邮箱验证码的记录显示"EmailVerifyRecord object", 并不能显示更能识别记录本身的内容.
e. models中重写__unicode__方法
class EmailVerifyRecord(models.Model): code = models.CharField(max_length=20, verbose_name="验证码") email = models.EmailField(max_length=50, verbose_name="邮箱") send_type = models.CharField(choices=(("register", "注册"), ("forget", "找回密码")), max_length=10, verbose_name="发送类型") send_time = models.DateTimeField(default=datetime.now, verbose_name="发送时间") class Meta: verbose_name = "邮箱验证码" verbose_name_plural = verbose_name def __unicode__(self): # 新增代码 return '{0}({1})'.format(self.code, self.email) # 新增代码
刷新浏览器, 发现邮箱验证码的记录仍然没有变化.
百度到一个解释, django对python2支持__unicode__方法, 但对Python3只支持__str__方法.
果断将__unicode__方法换成__str__方法.
代码中也出现了重写的标记了, __unicode__方法是没有出现的!
刷新网页, 成功了!
2. 自定义显示列
现在邮箱验证码列表中只有一列, 能否增加几列呢? 如下图所示.
在users/adminx中修改代码
class EmailVerifyRecordAdmin(object): list_display = ['code', 'email', 'send_type']
浏览器刷新后得到
3. 增加各字段搜索框
users/adminx中修改代码
class EmailVerifyRecordAdmin(object): list_display = ['code', 'email', 'send_type']
search_fields = ['code', 'email', 'send_type'] # 新增代码
刷新浏览器后, 增加了搜索框.
4. 增加筛选按钮
修改users/adminx代码
class EmailVerifyRecordAdmin(object): list_display = ['code', 'email', 'send_type']
search_fields = ['code', 'email', 'send_type']
list_filter = ['code', 'email', 'send_type', 'send_time'] # 新增代码
刷新浏览器后
试用一下过滤器, 看起来很强大
5. 注册users model中的Banner
在adminx中增加以下代码
class BannerAdmin(object): list_display = ['title', 'image', 'url', 'index', 'add_time'] search_fields = ['title', 'image', 'url', 'index'] list_filter = ['title', 'image', 'url', 'index', 'add_time'] xadmin.site.register(Banner, BannerAdmin)
6. 注册其他model
a. 注册course model
在course文件夹下新建一个adminx.py文件, 输入以下代码:
import xadmin from .models import Course, Lesson, Video, CourseResource class CourseAdmin(object): list_display = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students'] search_fields = ['name', 'desc', 'detail', 'degree', 'students'] list_filter = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students'] class LessonAdmin(object): list_display = ['course', 'name', 'add_t ac1a ime'] search_fields = ['course', 'name'] list_filter = ['course', 'name', 'add_time'] class VideoAdmin(object): list_display = ['lesson', 'name', 'add_time'] search_fields = ['lesson', 'name'] list_filter = ['lesson', 'name', 'add_time'] class CourseResourceAdmin(object): list_display = ['course', 'name', 'download', 'add_time'] search_fields = ['course', 'name', 'download'] list_filter = ['course', 'name', 'download', 'add_time'] xadmin.site.register(Course, CourseAdmin) xadmin.site.register(Lesson, LessonAdmin) xadmin.site.register(Video, VideoAdmin) xadmin.site.register(CourseResource, CourseResourceAdmin)
b. 注意外键
新建了1个课程"课程1", 接着新建章节时发现问题, 章节的字段课程是外键, 显示的是Course object, 显示不出来课程名.
解决方法是在cource model中设置__str__方法.
class Course(models.Model): # 中间代码省略 def __str__(self): # 新增代码 return self.name #新增代码
注意到Lesson也被Video和CourseResource引用作外键, 故也添加__str__方法.
class Lesson(models.Model): # 中间代码省略 def __str__(self): # 新增代码 return self.name # 新增代码
c. 注册organization
在其文件夹下新建adminx.py
输入代码
__author__ = 'Elvan' __date__ = '2017/8/11 6:33' import xadmin from .models import CityDict, CourseOrg, Teacher class CityDictAdmin(object): list_display = ['name', 'desc', 'add_time'] search_fields = ['name', 'desc'] list_filter = ['name', 'desc', 'add_time'] class CourseOrgAdmin(object): list_display = ['name', 'desc', 'click_num', 'fav_nums', 'image', 'address', 'city', 'add_time'] search_fields = ['name', 'desc', 'click_num', 'fav_nums', 'image', 'address', 'city'] list_filter = ['name', 'desc', 'click_num', 'fav_nums', 'image', 'address', 'city', 'add_time'] class TeacherAdmin(object): list_display = ['org', 'name', 'work_years', 'work_company', 'work_position', 'points', 'click_num', 'fav_nums', 'add_time'] search_fields = ['org', 'name', 'work_years', 'work_company', 'work_position', 'points', 'click_num', 'fav_nums'] list_filter = ['org', 'name', 'work_years', 'work_company', 'work_position', 'points', 'click_num', 'fav_nums', 'add_time'] xadmin.site.register(CityDict, CityDictAdmin) xadmin.site.register(CourseOrg, CourseOrgAdmin) xadmin.site.register(Teacher, TeacherAdmin)
d. 注册operation
在其文件夹下新建adminx.py
输入代码
import xadmin from .models import UserAsk, CourseComments, UserFavorite, UserMessage, UserCourse __author__ = 'Elvan' __date__ = '2017/8/11 6:45' class UserAskAdmin(object): list_display = ['name', 'mobile', 'course_name', 'add_time'] search_fields = ['name', 'mobile', 'course_name'] list_filter = ['name', 'mobile', 'course_name', 'add_time'] class CourseCommentsAdmin(object): list_display = ['user', 'course', 'comments', 'add_time'] search_fields = ['user', 'course', 'comments'] list_filter = ['user', 'course', 'comments', 'add_time'] class UserFavoriteAdmin(object): list_display = ['user', 'fav_id', 'fav_type', 'add_time'] search_fields = ['user', 'fav_id', 'fav_type'] list_filter = ['user', 'fav_id', 'fav_type', 'add_time'] class UserMessageAdmin(object): list_display = ['user', 'message', 'has_read', 'add_time'] search_fields = ['user', 'message', 'has_read'] list_filter = ['user', 'message', 'has_read', 'add_time'] class UserCourseAdmin(object): list_display = ['user', 'course', 'add_time'] search_fields = ['user', 'course'] list_filter = ['user', 'course', 'add_time'] xadmin.site.register(UserAsk, UserAskAdmin) xadmin.site.register(CourseComments, CourseCommentsAdmin) xadmin.site.register(UserFavorite, UserFavoriteAdmin) xadmin.site.register(UserMessage, UserMessageAdmin) xadmin.site.register(UserCourse, UserCourseAdmin)
7. xadmin全局设置
a. 设置皮肤主题
在users/adminx中增加以下代码
from xadmin import views class BaseSetting(object): enable_themes = True # 将隐藏的主题属性显现 use_bootswatch = True # 设置后才有很多主题可用
xadmin.site.register(views.BaseAdminView, BaseSetting) # 注册basesetting
浏览器效果:
b. 修改xadmin抬头和页脚
继续在users/adminx增加代码:
class GlobalSettings(object):
site_title = "黄光部在线后台"
site_footer = "黄光部在线"
menu_style = "accordion" # 将各app的model折叠起来
xadmin.site.register(views.CommAdminView, GlobalSettings) # 注册全局设定
浏览器效果:
c. 将左侧app名字改为中文
以users app为例, 增加users/apps中代码
class UsersConfig(AppConfig):
name = 'users'
verbose_name = "用户" # 新增别名
增加users/__ini__代码
default_app_config = "users.apps.UsersConfig"
同样的, 其他app的做法也一样, 只是__ini__文件中代码要依不同app名字而修改, 如courses的__ini__中应该写成:
default_app_config = "courses.apps.CoursesConfig"
浏览器效果
相关文章推荐
- 第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理
- Django建教育平台(三)--创建各App及其model
- 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册
- 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表
- 第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表
- 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表
- Django建教育平台(八)--用户注册
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(14)——各个App的adminx.py的设置
- 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(2)
- Django建教育平台(七)--用户登录
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(10)——Organization models.py的设计
- 关于DjangoRuntimeError: Model class doesn't declare an explicit app_label
- frist Django app— 二、 Model和管理界面
- django通过已经存在的数据库建立app对应的model
- 使用Django开发一个图书管理系统----04.通过admin模块管理我们的app和model
- Django建教育平台(六)--首页和登录页面配置
- 基于appcan平台开发一个简单的手机app--登录注册例子
- 第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(15)——xadmin的扩展