将users注册到settings.py中,并重载settings的一个方法AUTH_USER_MODEL覆盖django的默认users方法。
设计app时,避免循环引用,增加用户操作层
新增邮箱验证模型/首页轮播banner模型
新建courses APP
课程与章节是一对多的关系
课程与资源下载是一对多的关系
章节和视频是一对多的关系
models.CharField 和 models.TextField(不限制输入字符长度)区别
courses/models.py
# _*_ encoding:utf-8 _*_
from __future__ import unicode_literals
from datetime import datetime
from DjangoUeditor.models import UEditorField
from django.db import models
from organization.models import CourseOrg, Teacher
class Course(models.Model):
course_org = models.ForeignKey(CourseOrg, verbose_name=u"课程机构", null=True, blank=True, on_delete=models.CASCADE)
name = models.CharField(max_length=50, verbose_name=u"课程名")
desc = models.CharField(max_length=300, verbose_name=u"课程描述")
detail = UEditorField(verbose_name=u"课程详情",width=600, height=300, imagePath="courses/ueditor/",
filePath="courses/ueditor/", default='')
is_banner = models.BooleanField(default=False, verbose_name=u"是否轮播")
teacher = models.ForeignKey(Teacher, verbose_name=u"讲师", null=True, blank=True, on_delete=models.CASCADE)
degree = models.CharField(verbose_name=u"难度", choices=(("cj","初级"), ("zj","中级"), ("gj","高级")), max_length=2)
learn_times = models.IntegerField(default=0, verbose_name=u"学习时长(分钟数)")
students = models.IntegerField(default=0, verbose_name=u'学习人数')
fav_nums = models.IntegerField(default=0, verbose_name=u'收藏人数')
image = models.ImageField(upload_to="courses/%Y/%m", verbose_name=u"封面图", max_length=100)
click_nums = models.IntegerField(default=0, verbose_name=u"点击数")
category = models.CharField(default=u"后端开发", max_length=20, verbose_name=u"课程类别")
tag = models.CharField(default="", verbose_name=u"课程标签", max_length=10)
youneed_know = models.CharField(default="", max_length=300, verbose_name=u"课程须知")
teacher_tell = models.CharField(default="", max_length=300, verbose_name=u"老师告诉你")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
class Meta:
verbose_name = u"课程"
verbose_name_plural = verbose_name
def get_zj_nums(self):
#获取课程章节数
return self.lesson_set.all().count()
get_zj_nums.short_description = "章节数"
def go_to(self):
from django.utils.safestring import mark_safe
return mark_safe("<a href='http://www.projectsedu.com'>跳转</>")
go_to.short_description = "跳转"
def get_learn_users(self):
return self.usercourse_set.all()[:5]
def get_course_lesson(self):
#获取课程所有章节
return self.lesson_set.all()
def __str__(self):
return self.name
class BannerCourse(Course):
class Meta:
verbose_name = "轮播课程"
verbose_name_plural = verbose_name
proxy = True
class Lesson(models.Model): #视频对应课程(外键)
course = models.ForeignKey(Course, verbose_name=u"课程", on_delete=models.CASCADE)
name = models.CharField(max_length=100, verbose_name=u"章节名")
learn_times = models.IntegerField(default=0, verbose_name=u"学习时长(分钟数)")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
class Meta:
verbose_name = u"章节"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
def get_lesson_video(self):
#获取章节视频
return self.video_set.all()
class Video(models.Model): #视频对应章节(外键)
lesson = models.ForeignKey(Lesson, verbose_name=u"章节", on_delete=models.CASCADE)
name = models.CharField(max_length=100, verbose_name=u"视频名")
learn_times = models.IntegerField(default=0, verbose_name=u"学习时长(分钟数)")
url = models.CharField(max_length=200, default="", verbose_name=u"访问地址")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
class Meta:
verbose_name = u"视频"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class CourseResource(models.Model): #资源对应课程(外键)
course = models.ForeignKey(Course, verbose_name=u"课程", on_delete=models.CASCADE)
name = models.CharField(max_length=100, verbose_name=u"名称")
download = models.FileField(upload_to="course/resource/%Y/%m", verbose_name=u"资源文件", max_length=100)
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
class Meta:
verbose_name = u"课程资源"
verbose_name_plural = verbose_name