Django建教育平台(五)--各app的model注册

上一节讲解了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

__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_time']
    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"


浏览器效果







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值