当前位置: 首页 > 后端技术 > Python

killerxadmin开发在线教育网站2_需求分析与表结构设计2_设计课程相关表

时间:2023-03-26 12:07:44 Python

设计表结构课程<一对多>章节<一对多>视频<一对多>有几个重点-one1>课程资源Course/modeloldmodels.pyfromdatetimeimportdatetimefromdjango.dbimportmodels#1.设计表结构有几个要点#Entity1Entity2#Course#ChapterVideo课程资源(所以这个直接加到curriculum中)#2.实体的具体字段#3.每个字段的类型,是必填还是notclassBaseModel(models.Model):add_time=models.DateTimeField(default=datetime.now,verbose_name='addtime')#添加这个不会生成BaseModel表classMeta:abstract=TrueclassCourse(BaseModel):#add_time=models.DateTimeField(default=datetime.now,verbose_name='addtime')#不要使用datetime.now(#)方法od,如果用的话,调用的时候已经设置好了,但是我们希望在生成实例的时候填进去#应该是绝对的之后大部分都需要用到这个add_time,所以我们使用了django的继承机制继承这个实体的模型。大部分都需要用到这个add_time,所以我们利用django模型的继承机制来继承这个实体,所以我们提取出来就是BaseMode。使用abstract=True来防止BaseModel作为单独的表生成。因为BaseModel会被其他层的模型引用,所以放在最底层的用户层。然后在课程中引入users.model的BaseModel,开始设计新的Model。写入字段newmodels.pyfromdatetimeimportfrom网站所有信息datetimefromdjango.dbimportmodelsfromapps.users.modelsimportBaseModel#1.设计表结构有几个要点#Entity1Entity2#Course#ChapterVideo课程资源(所以这个直接加到curriculum中)#2.实体的具体字段#3.每个字段的类型,是否必填used,在调用的时候已经设置好了,但是我们希望在生成实例的时候填上#应该是after大部分都需要用到这个add_time,所以我们使用django模型的继承机制来继承这个实体#因为`BaseModel`会被其他层的模型引用,所以放在最底层的`user`层。然后在coursename中引入users.model的BaseModel=models.CharField(verbose_name='coursename',max_length=50)desc=models.CharField(verbose_name='coursedescription',max_length=300)#最好是最小的单位保存时长,显示时转换为小时或分钟learn_times=models.IntegerField(default=0,verbose_name='learningduration(minutes)')degree=models.CharField(verbose_name="difficulty",choices=(("cj","初级"),("zj","Intermediate"),("gj","Advanced")),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="coursenotes")teacher_tell=models.CharField(default="",max_length=300,verbose_name="老师告诉你")is_classics=models.BooleanField(default=False,verbose_name="是否经典")detail=models.TextField(verbose_name="coursedetails",default="")image=models.ImageField(upload_to="courses/%Y/%m",verbose_name="封面图片",max_length=100)classMeta:verbose_name='courseinformation'verbose_name_plural=verbose_nameclassLesson(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="学习时间(分钟)"),verbose_name='chapter',on_delete=models.CASCADE)#on_delete表示对应外键数据删除后对当前数据做什么name=models.CharField(max_length=100,verbose_name="videoname")learn_times=models.IntegerField(default=0,verbose_name="学习时长(分钟)")url=models.CharField(max_length=200,verbose_name='访问地址')classMeta:verbose_name='video'verbose_name_plural=verbose_nameclassCourseResource(BaseModel):课程=模型.ForeignKey(课程,on_delete=models.CASCADE,verbose_name="course")name=models.CharField(max_length=100,verbose_name=u"name")file=models.FileField(upload_to="course/resource/%Y/%m",verbose_name="下载地址",max_length=200)classMeta:verbose_name="courseresource"verbose_name_plural=verbose_name