设计表结构有几个重要的点
课程
<一对多>章节 <一对多>视频 <一对一>课程资源
Course/model
旧 models.py
from datetime import datetime
from django.db import models
# 1.设计表结构有几个重要的点
# 实体1 <关系> 实体2
# 课程
# <一对多>章节 <一对多>视频 <一对一>课程资源(所以这个直接加在课程表里面)
# 2. 实体的具体字段
# 3. 每个字段的类型,是否必填
class BaseModel(models.Model):
add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间')
# 添加了这个就不会生成BaseModel的表
class Meta:
abstract = True
class Course(BaseModel):
# add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间') # 不要使用datetime.now(
# )方法,若使用,则在调用的时候就已经设置好了,但我们希望在生成实例的时候才后填
# 应该之后的绝大部分都需要使用到这个add_time,所以我们采用django model的继承机制来继承这个实体
之后的绝大部分都需要使用到这个add_time,所以我们采用django model的继承机制来继承这个实体,所以将其提取为BaseMode。
使用abstract = True
来防止BaseModel
被生成单独的表。
因为BaseModel
会被其他层的model所引用,所以把他放到最下面的user
层.然后在course中引入users.model的BaseModel
开始设计新Model
由网站所有的信息来编写字段
新models.py
from datetime import datetime
from django.db import models
from apps.users.models import BaseModel
# 1.设计表结构有几个重要的点
# 实体1 <关系> 实体2
# 课程
# <一对多>章节 <一对多>视频 <一对一>课程资源(所以这个直接加在课程表里面)
# 2. 实体的具体字段
# 3. 每个字段的类型,是否必填
class Course(BaseModel):
# add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间') # 不要使用datetime.now(
# )方法,若使用,则在调用的时候就已经设置好了,但我们希望在生成实例的时候才后填
# 应该之后的绝大部分都需要使用到这个add_time,所以我们采用django model的继承机制来继承这个实体
# 因为`BaseModel`会被其他层的model所引用,所以把他放到最下面的`user`层.然后在course中引入users.model的BaseModel
name = models.CharField(verbose_name='课程名', max_length=50)
desc = models.CharField(verbose_name='课程描述', max_length=300)
# 最好是以最小单位来保存时长,在显示的时候再将其转换为小时或分钟
learn_times = models.IntegerField(default=0, verbose_name='学习时长(分钟数)')
degree = models.CharField(verbose_name="难度", choices=(("cj", "初级"), ("zj", "中级"), ("gj", "高级")), max_length=2)
students = models.IntegerField(default=0, verbose_name='学习人数')
fav_nums = models.IntegerField(default=0, verbose_name='收藏人数')
click_nums = models.IntegerField(default=0, verbose_name="点击数")
notice = models.CharField(verbose_name="课程公告", max_length=300, default="")
category = models.CharField(default=u"后端开发", max_length=20, verbose_name="课程类别")
tag = models.CharField(default="", verbose_name="课程标签", max_length=10) # 用于相关课程的推荐
youneed_know = models.CharField(default="", max_length=300, verbose_name="课程须知")
teacher_tell = models.CharField(default="", max_length=300, verbose_name="老师告诉你")
is_classics = models.BooleanField(default=False, verbose_name="是否经典")
detail = models.TextField(verbose_name="课程详情", default="")
image = models.ImageField(upload_to="courses/%Y/%m", verbose_name="封面图", max_length=100)
class Meta:
verbose_name = '课程信息'
verbose_name_plural = verbose_name
class Lesson(BaseModel):
course = models.ForeignKey(Course, on_delete=models.CASCADE) # on_delete表示对应的外键数据被删除后,当前的数据应该怎么办
name = models.CharField(max_length=100, verbose_name="章节名")
learn_times = models.IntegerField(default=0, verbose_name="学习时长(分钟数)")
class Meta:
verbose_name = '课程章节'
verbose_name_plural = verbose_name
class Video(BaseModel):
lesson = models.ForeignKey(Lesson, verbose_name='章节', on_delete=models.CASCADE) # on_delete表示对应的外键数据被删除后,当前的数据应该怎么办
name = models.CharField(max_length=100, verbose_name="视频名")
learn_times = models.IntegerField(default=0, verbose_name="学习时长(分钟数)")
url = models.CharField(max_length=200, verbose_name='访问地址')
class Meta:
verbose_name = '视频'
verbose_name_plural = verbose_name
class CourseResource(BaseModel):
course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name="课程")
name = models.CharField(max_length=100, verbose_name=u"名称")
file = models.FileField(upload_to="course/resource/%Y/%m", verbose_name="下载地址", max_length=200)
class Meta:
verbose_name = "课程资源"
verbose_name_plural = verbose_name
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。