Django学习系列之Python+Xadmin
项目树

引入xadmin
pycharm在项目中创建存放xadmin的目录
右键项目名称-->pythonpackage-->输入名称:extra_app

拷贝xadmin代码到extra_app
(mxonline) zhaijunming@zhaijuningdeMBP:~/Desktop/Project/python$ git clone https://github.com/zaxlct/imooc-django.git
(mxonline) zhaijunming@zhaijuningdeMBP:~/Desktop/Project/python$ cp -r imooc-django/extra_apps/xadmin MxOnline/extra_apps/.
配置settings.py
# 设置 apps, extra_apps 目录
sys.path.insert(,os.path.join(BASE_DIR,'apps'))
sys.path.insert(, os.path.join(BASE_DIR, 'extra_apps')) #添加xadmin app
INSTALLED_APPS = [
'xadmin',
'crispy_forms',
] LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False
配置url
MxOnline/urls.py
from django.conf.urls import url
from django.contrib import admin
import xadmin urlpatterns = [
url(r'^admin/', xadmin.site.urls),
]
生成数据表
makemigrations
migrate
测试
访问127.0.0.1:8000/admin

页头和页尾自定义

随便一个项目的adminx.py中增加以下代码
from xadmin import views class GlobalSetting(object):
site_title = "慕学网后台管理系统"
site_footer = "慕学在线网" xadmin.site.register(views.CommAdminView, GlobalSetting)
左侧菜单栏样式改变
修改前

修改后

随便一个项目的adminx.py中增加以下代码
from xadmin import views class GlobalSetting(object):
site_title = "慕学网后台管理系统"
site_footer = "慕学在线网"
menu_style = "accordion" xadmin.site.register(views.CommAdminView, GlobalSetting)
左侧菜单栏app名称改成中文
修改前

修改后

每一个app同理
比如users这个app
users-->apps.py
from django.apps import AppConfig class UsersConfig(AppConfig):
name = 'users'
verbose_name = '用户信息' 增加这个字段,这个就是要显示的名称
users-->init.py
default_app_config = "users.apps.UsersConfig"
将models注册进xadmin
表结构(models.py)
from django.db import models
from datetime import datetime
from organization.models import *
# Create your models here.
#这里有多个表,CourseOrg(机构表),course(课程表),lesson(章节表),Video(视频表),机构和课程是一对多的关系,一个机构有多个课程,课程和章节是一对多的关系,一个课程有多个章节,章节和视频也是一对多关系,一个章节有多个视频
class CourseOrg(models.Model):
'''机构'''
name = models.CharField(max_length=50,verbose_name='机构名称')
choice_category = (
('pxjg', '培训机构'),
('gx', '高校'),
('gr', '个人'),
)
category = models.CharField(default='pxjg',max_length=20,choices=choice_category)
desc = models.TextField(verbose_name='机构描述')
click_num = models.IntegerField(default=0,verbose_name='点击数')
fav_num = models.IntegerField(default=0,verbose_name='收藏数')
image = models.ImageField(upload_to='org/%Y/%m',verbose_name='logo')
address = models.CharField(max_length=150,verbose_name='机构地址')
city = models.ForeignKey(CityDict,verbose_name='机构所在城市')
student = models.IntegerField(default=0,verbose_name='学习人数')
course_nums = models.IntegerField(default=0,verbose_name='课程数')
add_time = models.DateTimeField(default=datetime.now) class Meta:
verbose_name = '课程机构'
verbose_name_plural = '课程机构' def __str__(self):
return self.name
class Course(models.Model):
'''课程'''
course_org = models.ForeignKey(CourseOrg,verbose_name='课程机构',null=True,blank=True)
name = models.CharField(max_length=,verbose_name='课程名')
desc = models.CharField(max_length=,verbose_name='课程描述')
detail = models.TextField(verbose_name='课程详情')
choice_degree = (
('cj','初级'),
('zj','中级'),
('gj','高级'),
)
degree = models.CharField(choices=choice_degree,max_length=,verbose_name='课程难度')
learn_times = models.IntegerField(default=,verbose_name='学习时长(分钟数)')
students = models.IntegerField(default=,verbose_name='学习人数')
fav_nums = models.IntegerField(default=,verbose_name='收藏人数')
image = models.ImageField(upload_to='courses/%Y/%m',verbose_name='封面图')
click_nums = models.IntegerField(default=,verbose_name='点击数')
add_time = models.DateTimeField(default=datetime.now,verbose_name='添加时间') class Meta:
verbose_name = '课程'
verbose_name_plural = '课程' def __str__(self):
return self.name class Lesson(models.Model):
'''章节'''
course = models.ForeignKey(Course,verbose_name='课程')
name = models.CharField(max_length=,verbose_name='章节名称')
add_time = models.DateTimeField(default=datetime.now,verbose_name='添加时间') class Meta:
verbose_name = '章节'
verbose_name_plural = '章节' def __str__(self):
return self.name class Video(models.Model):
'''视频'''
lesson = models.ForeignKey(Lesson,verbose_name='章节')
name = models.CharField(max_length=,verbose_name='视频名称')
add_time = models.DateTimeField(default=datetime.now,verbose_name='添加时间') class Meta:
verbose_name = '视频'
verbose_name_plural = '视频' def __str__(self):
return self.name
adminx.py
import xadmin
from xadmin import views from .models import * class CourseAdmin(object):
list_display = ['course_org','name', 'desc', 'detail', 'degree','learn_times','students','fav_nums','image','click_nums','add_time']
search_fields = ['course_org','name', 'desc', 'detail', 'degree','students','fav_nums','image','click_nums']
list_filter = ['course_org__name','name', 'desc', 'detail', 'degree','learn_times','students','fav_nums','image','click_nums','add_time'] class LessonAdmin(object):
list_display = ['course', 'name','add_time']
search_fields = ['course', 'name']
#由于lesson和course是一对多关系,一个课程有多个章节,这里的course是course 的外键,想要根据课程名称过滤章节的话,需要指定course中的一个字段,比如说name,就是根据课程名过滤属于这个课程名称的所有章节
list_filter = ['course__name', 'name','add_time'] class VideoAdmin(object):
list_display = ['lesson','name','add_time']
search_fields = ['lesson','name']
list_filter = ['lesson__name', 'name', 'add_time'] xadmin.site.register(Course,CourseAdmin)
xadmin.site.register(Lesson,LessonAdmin)
xadmin.site.register(Video,VideoAdmin)
#我们把course,lesson,video注册进xadmin了
效果:



Django学习系列之Python+Xadmin的更多相关文章
- Django学习系列之Form基础
Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...
- Django学习系列6:使用selenium测试用户交互
学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...
- django学习系列——python和php对比
python 和 php 我都是使用过,这里不想做一个非常理性的分析,只是根据自己的经验谈一下感想. 在web开发方面,无疑 php 更甚一筹. 从某种角度来说,php 就是专门为 web 定制的语言 ...
- Python&Django学习系列之-激活管理界面
1.创建你个人的项目与APP 2.填写你的数据库名称与数据库类型,这里使用内置的sqllite3 3.修改setting文件 a.将'django.contrib.admin'加入setting的IN ...
- Django学习系列12:把Python变量传入模板中渲染
从视图的Python代码中把变量传入HTML模板. 模板中使用哪种句法引入Python对象,要使用的符号{{...}},它会以字符串的形式显示对象: <html> <head> ...
- Python零基础学习系列之三--Python编辑器选择
上一篇文章记录了怎么安装Python环境,同时也成功的在电脑上安装好了Python环境,可以正式开始自己的编程之旅了.但是现在又有头疼的事情,该用什么来写Python程序呢,该用什么来执行Python ...
- Django学习系列5:为视图编写单元测试
打开lists/tests.py编写 """向浏览器返回真正的HTML响应,添加一个新的测试方法""" from django.test i ...
- Python零基础学习系列之四--Python程序设计思想
前面我们把Python环境安装成功,同时也选择了自己合适的IDE工具来开启自己的编程之旅. 那么今天来说说怎么编程,程序设计需要什么步骤,我们应该怎么做才能编写自己的程序. 1-1.程序设计方法: I ...
- Django学习系列之request对象
先来一个简单的实例 urls.py from django.conf.urls import url from django.contrib import admin from cmdb import ...
随机推荐
- 微信小程序中的图形验证码
可以在utils中新建一个mcaptcha.js 代码如下: module.exports = class Mcaptcha { constructor(options) { this.options ...
- 新建 vue项目时报错,无法成功搭建项目
之前电脑已经安装 Node环境和 vue-cli脚手架,但是过段时间没有使用,然后现在用 vue-cli 搭建项目的时候,启动服务器的时候报错,无法启动成功,摸索半天,发现是因为 Node和vue-c ...
- leetcode_951. Flip Equivalent Binary Trees_二叉树遍历
https://leetcode.com/problems/flip-equivalent-binary-trees/ 判断两棵二叉树是否等价:若两棵二叉树可以通过任意次的交换任意节点的左右子树变为相 ...
- ssd运行过程中遇到的bug
1.出现以下错误: 没有添加环境变量: https://github.com/weiliu89/caffe/issues/4 可以看到当前PYTHONPATH不再ssd1里面,所以需要修改,修改之后就 ...
- velocity(vm)模板引擎基本语法
for循环 #foreach($acc in $!{param.tools}) #set($count = $count + 1) <li custom-data="$!{acc.or ...
- git Please tell me who you are解决方法
在git创建项目时出现,是因为在创建git文件夹的时候信息不完善导致的下图是正确在git创建项目时出现,是因为在创建git文件夹的时候信息不完善导致的下图是正确1.git init2.git conf ...
- P5304 [GXOI/GZOI2019]旅行者(最短路/乱搞)
luogu bzoj Orz自己想出神仙正解的sxy 描述略 直接把所有起点推进去跑dijkstra... 并且染色,就是记录到这个点的最短路是由哪个起点引导出来的 然后再把所有边反指跑一次... 之 ...
- spring data jpa方法命名规则
关键字 方法命名 sql where字句 And findByNameAndPwd where name= ? and pwd =? Or findByNameOrSex where name= ? ...
- ubuntu环境安装docker
查看已安装的docker apt list docker* 如果已安装,并且需要卸载,则执行以下命令: apt remove docker* 更新apt索引 apt update apt需要支持HTT ...
- ecshop 修改支持php7 方案
修改方法 http://jsb.php-php.com/2016/05/472/ 修改数据库配置 data/config.php