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(0,os.path.join(BASE_DIR,'apps'))
sys.path.insert(0, 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=50,verbose_name='课程名') desc = models.CharField(max_length=300,verbose_name='课程描述') detail = models.TextField(verbose_name='课程详情') choice_degree = ( ('cj','初级'), ('zj','中级'), ('gj','高级'), ) degree = models.CharField(choices=choice_degree,max_length=2,verbose_name='课程难度') learn_times = models.IntegerField(default=0,verbose_name='学习时长(分钟数)') students = models.IntegerField(default=0,verbose_name='学习人数') fav_nums = models.IntegerField(default=0,verbose_name='收藏人数') image = models.ImageField(upload_to='courses/%Y/%m',verbose_name='封面图') click_nums = models.IntegerField(default=0,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=100,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=100,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了

效果:

 

 

 

 

 

转载于:https://www.cnblogs.com/zhaijunming5/p/7526396.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值