课程表分析

课程表分析

class Course(models.Model):name = models.CharField(max_length=64)title = models.CharField(max_length=64)students = models.IntegerField(default=0)level = models.IntegerField(choices=((0, '入门'), (1, '进阶')), default=0)time = models.IntegerField(default=0)detail = models.TextField()  # 可以关联详情表type = models.IntegerField(choices=((0, 'Python'), (1, 'Linux')), default=0)is_show = models.BooleanField(default=False)class Meta:abstract = True# 免费课
class FreeCourse(Course):image = models.ImageField(upload_to='course/free')attachment = models.FileField(upload_to='attachment')# 实战课
class ActualCourse(Course):image = models.ImageField(upload_to='course/actual')price = models.DecimalField(max_digits=7, decimal_places=2)cost = models.DecimalField(max_digits=7, decimal_places=2)# 轻课
class LightCourse(Course):image = models.ImageField(upload_to='course/light')price = models.DecimalField(max_digits=7, decimal_places=2)cost = models.DecimalField(max_digits=7, decimal_places=2)period = models.IntegerField(verbose_name='学习建议周期(month)', default=0)# 评论表:分三个表、(id,ctx,date,user_id,free_course_id, comment_id)
# 老师表:在课程表建立多对一外键
# 章节表:在章节表建立多对一外键关联课程
# 课时表:在课时表建立多对一外键关联章节

免费课案例

创建models:course/models.py
class CourseCategory(BaseModel):"""分类"""name = models.CharField(max_length=64, unique=True, verbose_name="分类名称")class Meta:db_table = "luffy_course_category"verbose_name = "分类"verbose_name_plural = verbose_namedef __str__(self):return "%s" % self.name
class Course(BaseModel):"""课程"""course_type = ((0, '付费'),(1, 'VIP专享'),(2, '学位课程'))level_choices = ((0, '初级'),(1, '中级'),(2, '高级'),)status_choices = ((0, '上线'),(1, '下线'),(2, '预上线'),)name = models.CharField(max_length=128, verbose_name="课程名称")course_img = models.ImageField(upload_to="courses", max_length=255, verbose_name="封面图片", blank=True, null=True)course_type = models.SmallIntegerField(choices=course_type, default=0, verbose_name="付费类型")# 使用这个字段的原因brief = models.TextField(max_length=2048, verbose_name="详情介绍", null=True, blank=True)level = models.SmallIntegerField(choices=level_choices, default=0, verbose_name="难度等级")pub_date = models.DateField(verbose_name="发布日期", auto_now_add=True)period = models.IntegerField(verbose_name="建议学习周期(day)", default=7)attachment_path = models.FileField(upload_to="attachment", max_length=128, verbose_name="课件路径", blank=True,null=True)status = models.SmallIntegerField(choices=status_choices, default=0, verbose_name="课程状态")course_category = models.ForeignKey("CourseCategory", on_delete=models.SET_NULL, db_constraint=False, null=True, blank=True,verbose_name="课程分类")students = models.IntegerField(verbose_name="学习人数", default=0)sections = models.IntegerField(verbose_name="总课时数量", default=0)pub_sections = models.IntegerField(verbose_name="课时更新数量", default=0)price = models.DecimalField(max_digits=6, decimal_places=2, verbose_name="课程原价", default=0)teacher = models.ForeignKey("Teacher", on_delete=models.DO_NOTHING, null=True, blank=True, verbose_name="授课老师")class Meta:db_table = "luffy_course"verbose_name = "课程"verbose_name_plural = "课程"def __str__(self):return "%s" % self.name
class Teacher(BaseModel):"""导师"""role_choices = ((0, '讲师'),(1, '导师'),(2, '班主任'),)name = models.CharField(max_length=32, verbose_name="导师名")role = models.SmallIntegerField(choices=role_choices, default=0, verbose_name="导师身份")title = models.CharField(max_length=64, verbose_name="职位、职称")signature = models.CharField(max_length=255, verbose_name="导师签名", help_text="导师签名", blank=True, null=True)image = models.ImageField(upload_to="teacher", null=True, verbose_name="导师封面")brief = models.TextField(max_length=1024, verbose_name="导师描述")class Meta:db_table = "luffy_teacher"verbose_name = "导师"verbose_name_plural = verbose_namedef __str__(self):return "%s" % self.name
class CourseChapter(BaseModel):"""章节"""course = models.ForeignKey("Course", related_name='coursechapters', on_delete=models.CASCADE, verbose_name="课程名称")chapter = models.SmallIntegerField(verbose_name="第几章", default=1)name = models.CharField(max_length=128, verbose_name="章节标题")summary = models.TextField(verbose_name="章节介绍", blank=True, null=True)pub_date = models.DateField(verbose_name="发布日期", auto_now_add=True)class Meta:db_table = "luffy_course_chapter"verbose_name = "章节"verbose_name_plural = verbose_namedef __str__(self):return "%s:(第%s章)%s" % (self.course, self.chapter, self.name)
class CourseSection(BaseModel):"""课时"""section_type_choices = ((0, '文档'),(1, '练习'),(2, '视频'))chapter = models.ForeignKey("CourseChapter", related_name='coursesections', on_delete=models.CASCADE,verbose_name="课程章节")name = models.CharField(max_length=128, verbose_name="课时标题")orders = models.PositiveSmallIntegerField(verbose_name="课时排序")section_type = models.SmallIntegerField(default=2, choices=section_type_choices, verbose_name="课时种类")section_link = models.CharField(max_length=255, blank=True, null=True, verbose_name="课时链接",help_text="若是video,填vid,若是文档,填link")duration = models.CharField(verbose_name="视频时长", blank=True, null=True, max_length=32)  # 仅在前端展示使用pub_date = models.DateTimeField(verbose_name="发布时间", auto_now_add=True)free_trail = models.BooleanField(verbose_name="是否可试看", default=False)class Meta:db_table = "luffy_course_Section"verbose_name = "课时"verbose_name_plural = verbose_namedef __str__(self):return "%s-%s" % (self.chapter, self.name)
注册models:course/adminx.py
import xadmin
from . import models
xadmin.site.register(models.CourseCategory)
xadmin.site.register(models.Course)
xadmin.site.register(models.Teacher)
xadmin.site.register(models.CourseChapter)
xadmin.site.register(models.CourseSection)
数据库迁移
>: python manage.py makemigrations
>: python manage.py migrate

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02、全文检索 ------ Solr(企业级的开源的搜索引擎) 的下载、安装、Solr的Web图形界面介绍

目录 Solr 的下载和安装Solr的优势:Lucene与Solr 安装 Solr1、下载解压2、添加环境变量3、启动 Solr Solr 所支持的子命令:Solr 的 Core 和 Collection 介绍Solr 的Web控制台DashBoard(仪表盘)Logging(日志&#xff09…

代码随想录算法训练营29期|day34 任务以及具体任务

第八章 贪心算法 part03 1005.K次取反后最大化的数组和 class Solution {public int largestSumAfterKNegations(int[] nums, int K) {// 将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小nums IntStream.of(nums).boxed().sorted((o1, o2) -> Math.ab…

华为1.24秋招笔试题

华为1.24秋招笔试题 1.题目1 题目详情 - 2024.1.24-华为秋招笔试-第一题-计算积分 - CodeFun2000 1.1题解 import java.util.Scanner;class Main{public static void main(String[] args){Scanner scnew Scanner(System.in);String ssc.next();char[] chs.toCharArray();in…

【INTEL(ALTERA)】如何在 Windows 操作系统上设置 Design Space Explorer II 远程 SSH 场

说明 从英特尔 Quartus Prime Pro Edition 软件 22.1 版本开始,您可以选择使用 Windows OpenSSH 服务器设置 Design Space Explorer II (DSE II)。 解决方法 1.让 DSE II 与 OpenSSH 协同工作的第一步是 安装 OpenSSH。应在远程主机上安装 Op…

electron从入门到打包exe

1.安装electron npm一直失败,我就cnpm安装的 2.创建一个简单示例: 新建一个文件夹,然后cmd 先搞个package.json: npm init -y然后再添加electron依赖 cnpm install electron然后再写个main.js const { app, BrowserWindow, Menu } req…

C++中的类的引入

一、类的引入 在C语言的结构体中只能定义变量;在C的结构体中,不仅可以定义变量,还可以定义函数。 例如,在用C语言实现栈时,结构体struct中只能定义变量;但是如果用C实现,结构体中还可以定义函…

qt语言国际化(翻译),并实现多窗口同时翻译

一、.pro文件中添加支持的语言 在.pro文件中添加下面几句,支持中文和英文 TRANSLATIONS lanague_cn.ts\lanague_en.ts二、通过qt语言家更新翻译生成.ts文件 完成以后在工程目录可以看到.ts文件 三、通过linguist翻译文件 打开文件 将两个文件同时选中&#xf…

【WPF.NET开发】优化性能:图形呈现层

本文内容 图形硬件呈现层定义其他资源 呈现层为运行 WPF 应用程序的设备定义图形硬件功能和性能级别。 1、图形硬件 对呈现层级别影响最大的图形硬件功能包括: 视频 RAM - 图形硬件中的视频内存量决定了可用于合成图形的缓冲区大小和数量。 像素着色器 - 像素着…

c# 海康照相机操作封装类(网口,USB)

需求 在上位机开发中, 海康照相机的使用应该是很常见的,主要是网口通讯的相机用的多,有时也会用一些USB接口相机。以前项目都在赶时间做。没有时间去好好设计和封装。时间长了发现重复代码就很多,还有没有设计和封装的代码,代码份数和相机个数对等,说白了就是一个相机写一…

【优秀案例】回本周期缩短10%!日安装量级高达5000以上!看NetMarvel如何赋能Ball Sort达成多项目标

“合成大西瓜在海外火了” 没想到,在国内已经过气的玩法转战到海外后,还能够翻红的这么彻底? 实际上,市面上很多在本土市场不温不火但转战海外赛道却盈利感人的应用不在少数,比如我们今天的重头戏《Ball Sort - Colo…

iView 中DatePicker日期选择器 v-model不生效的情况

场景 公司项目前段使用的是iview样式库,在开发的过程中,需要使用到时间选择器 使用后发现,输出的时间格式有问题,查看了需要使用到format来设置输出内容,发现不生效 百度… 1、百度后了解到v-model和format使用&…

基于Element的进度条Loading

基于Element的进度条loading组件 前端在中后台项目开发中经常要使用到loading遮罩层在数据交互时展示,目前我使用element组件库的loading,发现不能自定义,loading的样式比较少,官方只提供修改loading的图标和文字。 但是我的需求…

【云上建站】快速在云上构建个人网站4——网站备案

快速在云上构建个人网站4——网站备案 一、为网站配置域名1、使用域名的原因2、域名使用逻辑3、域名配置流程 二、域名注册1、查询域名:2、确认订单:3、实名认证域名4、域名解析配置解析域名:解析设置:访问域名: 一、为…

【深度学习:多关节嵌入模型】 Meta 解释的 ImageBind 多关节嵌入模型

【深度学习:多关节嵌入模型】 Meta 解释的 ImageBind 多关节嵌入模型 Meta 发布开源人工智能工具的历史分段任何模型DINOv2 什么是多模态学习?什么是嵌入?什么是 ImageBind?集成在 ImageBind 中的模式图像绑定架构特定模式编码器跨…

Flask框架开发学习笔记《6》前后端不分离基础框架

Flask框架开发学习笔记《6》前后端不分离基础框架 Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。 主要包含如下文件: static 目录中存储了图片templates 目录中存储了 html 文件utils.py 包含了 log 函数server.p…

资深Android逆袭、华为鸿蒙为安卓程序员开辟了一条新道路

本文章主要从以下5个方面来展开聊聊这个话题: 1.什么是鸿蒙 2.鸿蒙系统发展时间线 3.鸿蒙是套壳Android吗? 4.鸿蒙的生态(用户以及开发者) 5.一些建议 1月18日,在鸿蒙生态千帆启航仪式上,华为宣布了继鸿蒙4…

实现单点登录

指再多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分。 相比于单系统登录,sso需要一个独立的认证中心,只有认证红心能接受用户的用户名密码等安全信息,其他系统…

C#,打印漂亮的贝尔三角形(Bell Triangle)的源程序

以贝尔数为基础,参考杨辉三角形,也可以生成贝尔三角形(Bell triangle),也称为艾特肯阵列(Aitkens Array),皮埃斯三角形(Peirce Triangle)。 贝尔三角形的构造…

Python办公自动化:解锁高效工作流程,掌握文档处理的艺术

1.python自动化办公 Python 在自动化办公方面非常强大和灵活,能够帮助提高工作效率,自动化完成重复性任务。Python 提供了多种库和工具,可以用于处理文档、电子表格、PDF 文件、电子邮件等。下面是一些常用的 Python 自动化办公库及其应用&a…

大创项目推荐 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分:4.2 损失函数:4.3 搭建seq2seq框架:4.4 测试部分:4.5 评价NLP测试效果:4.6 梯度截断…