1、四个model完整代码:

# users/models.py

from datetime import datetime

from django.db import models
from django.contrib.auth.models import AbstractUser class UserProfile(AbstractUser): gender_choices = (
('male', '男'),
('female', '女')
) nick_name = models.CharField('昵称', max_length=50, default='')
birthday = models.DateField('生日', null=True, blank=True)
gender = models.CharField('性别', max_length=10, choices=gender_choices, default='female')
adress = models.CharField('地址', max_length=100, default='')
mobile = models.CharField('手机号', max_length=11, null=True, blank=True)
image = models.ImageField(upload_to='image/%Y%m', default='image/default.png', max_length=100) class Meta:
verbose_name = '用户信息'
verbose_name_plural = verbose_name def __str__(self):
return self.username class EmailVerifyRecord(models.Model):
send_choices = (
('register', '注册'),
('forget', '找回密码')
) code = models.CharField('验证码', max_length=20)
email = models.EmailField('邮箱', max_length=50)
send_type = models.CharField(choices=send_choices, max_length=10)
send_time = models.DateTimeField(default=datetime.now) class Meta:
verbose_name = '邮箱验证码'
verbose_name_plural = verbose_name class Banner(models.Model):
title = models.CharField('标题', max_length=100)
image = models.ImageField('轮播图', upload_to='banner/%Y%m', max_length=100)
url = models.URLField('访问地址', max_length=200)
index = models.IntegerField('顺序', default=100)
add_time = models.DateTimeField('添加时间', default=datetime.now) class Meta:
verbose_name = '轮播图'
verbose_name_plural = verbose_name

  

# course\models.py

from django.db import models
from datetime import datetime
# Create your models here. class Course(models.Model):
name = models.CharField(max_length=50, verbose_name="课程名")
desc = models.CharField(max_length=300, verbose_name="课程描述")
detail = models.TextField(verbose_name="课程详情") # 暂时为TextField
degree = models.CharField(choices=(("cj", "初级"), ("zj", "中级"), ("gj", "高级")), max_length=2)
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="course/%Y/%m", verbose_name="封面图", max_length=100)
click_num = models.IntegerField(default=0, verbose_name="点击数")
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta:
verbose_name = "课程"
verbose_name_plural = verbose_name def __str__(self):
return self.name class Lesson(models.Model):
course = models.ForeignKey(Course, verbose_name="课程", on_delete=models.CASCADE) # 删除关联数据,与之关联也删除
name = models.CharField(max_length=100, verbose_name="章节名")
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta:
verbose_name = "章节"
verbose_name_plural = verbose_name def __str__(self):
return '《{0}》课程的章节 >> {1}'.format(self.course, self.name) class Video(models.Model):
lesson = models.ForeignKey(Lesson, verbose_name="章节", on_delete=models.CASCADE)
name = models.CharField(max_length=100, verbose_name="视频名称")
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta:
verbose_name = "视频"
verbose_name_plural = verbose_name class CourseResource(models.Model):
course = models.ForeignKey(Course, verbose_name="课程", on_delete=models.CASCADE)
name = models.CharField(max_length=100, verbose_name="视频名称")
download = models.FileField(upload_to="course/resource/%Y/%m", verbose_name="资源文件", max_length=100)
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta:
verbose_name = "课程信息"
verbose_name_plural = verbose_name

  

# organization\models.py
from datetime import datetime from django.db import models class CityDict(models.Model):
name = models.CharField('城市', max_length=20)
desc = models.CharField('描述', max_length=200)
add_time = models.DateTimeField(default=datetime.now) class Meta:
verbose_name = '城市'
verbose_name_plural = verbose_name class CourseOrg(models.Model):
name = models.CharField('机构名称', max_length=50)
desc = models.TextField('机构描述')
click_nums = models.IntegerField('点击数', default=0)
fav_nums = models.IntegerField('收藏数', default=0)
image = models.ImageField('封面图', upload_to='org/%Y%m', max_length=100)
address = models.CharField('机构地址', max_length=150)
city = models.ForeignKey(CityDict, verbose_name='所在城市', on_delete=models.CASCADE)
add_time = models.DateTimeField(default=datetime.now) class Meta:
verbose_name = '课程机构'
verbose_name_plural = verbose_name class Teacher(models.Model):
org = models.ForeignKey(CourseOrg, verbose_name='所属机构', on_delete=models.CASCADE)
name = models.CharField('教师名', max_length=50)
work_years = models.IntegerField('工作年限', default=0)
work_company = models.CharField('就职公司', max_length=50)
work_position = models.CharField('公司职位', max_length=50)
points = models.CharField('教学特点', max_length=50)
click_nums = models.IntegerField('点击数', default=0)
fav_nums = models.IntegerField('收藏数', default=0)
add_time = models.DateTimeField(default=datetime.now) class Meta:
verbose_name = '教师'
verbose_name_plural = verbose_name def __str__(self):
return "[{0}]的教师: {1}".format(self.org, self.name)

  

# operation\models.py

from datetime import datetime

from django.db import models

from course.models import Course
from users.models import UserProfile class UserAsk(models.Model):
name = models.CharField('姓名', max_length=20)
mobile = models.CharField('手机', max_length=11)
course_name = models.CharField('课程名', max_length=50)
add_time = models.DateTimeField('添加时间', default=datetime.now) class Meta:
verbose_name = '用户咨询'
verbose_name_plural = verbose_name def __str__(self):
return self.name class CourseComments(models.Model):
user = models.ForeignKey(UserProfile, verbose_name='用户', on_delete=models.CASCADE)
course = models.ForeignKey(Course, verbose_name='课程', on_delete=models.CASCADE)
comments = models.CharField('评论', max_length=200)
add_time = models.DateTimeField('添加时间', default=datetime.now) class Meta:
verbose_name = '课程评论'
verbose_name_plural = verbose_name class UserFavorite(models.Model):
FAV_TYPE = (
(1, '课程'),
(2, '课程机构'),
(3, '讲师')
) user = models.ForeignKey(UserProfile, verbose_name='用户', on_delete=models.CASCADE)
fav_id = models.IntegerField('数据id', default=0)
fav_type = models.IntegerField(verbose_name='收藏类型', choices=FAV_TYPE, default=1)
add_time = models.DateTimeField('添加时间', default=datetime.now) class Meta:
verbose_name = '用户收藏'
verbose_name_plural = verbose_name class UserMessage(models.Model):
user = models.IntegerField('接受用户', default=0)
message = models.CharField('消息内容', max_length=500)
has_read = models.BooleanField('是否已读', default=False)
add_time = models.DateTimeField('添加时间', default=datetime.now) class Meta:
verbose_name = '用户消息'
verbose_name_plural = verbose_name class UserCourse(models.Model):
user = models.ForeignKey(UserProfile, verbose_name='用户', on_delete=models.CASCADE)
course = models.ForeignKey(Course, verbose_name='课程', on_delete=models.CASCADE)
add_time = models.DateTimeField('添加时间', default=datetime.now) class Meta:
verbose_name = '用户课程'
verbose_name_plural = verbose_name

 

2、创建完后记得把App添加到settings的“INSTALLED_APPS”里面

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'course',
'organization',
'operation',
]

  

3、迁移到数据库

makemigrations
migrate

  

4、将四个App放到一起

  • 新建package:apps
  • 把四个App都拖进去



    红框内的 √ 记得去掉
  • 然后Mark为sourceRoot

 

5、然而我们发现,在cmd下运行的话还是会报错



  

需要在settings设置:

import os
import sys # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

再运行就可以了



  

未完待续~~~

慕学在线网0.3_四个model的更多相关文章

  1. 慕学在线网0.5_xadmin的全局配置

    全局配置包括了以下修改: 开启主题功能: 修改左上角的"django Xadmin"和主界面的"我的公司": App菜单收叠: App名字修改(汉化). 1.把 ...

  2. 慕学在线网0.4_xadmin后台管理

    admin是基于Django开发的后台管理框架,方便,快捷,而且简单: 而xadmin就相当于admin的升级版,更加强大. 1.安装xadmin(源码安装方式) 教程 PS: - 卸载pip安装的x ...

  3. 慕学在线网0.2_users表设计(2)

    接着上一篇,我们继续对users表进行完善.其中包括邮箱验证码(EmailVerifyRecord)和轮播图(PageBanner)两个model. 1.编写"models.py" ...

  4. 慕学在线网0.2_users表设计(1)

    1.Django App设计: users-用户管理(任何web中,users表都是第一个被设计的) course-课程管理 organization-机构和教师管理 operation-用户操作管理 ...

  5. 十天学Linux内核之第四天---如何处理输入输出操作

    原文:十天学Linux内核之第四天---如何处理输入输出操作 真的是悲喜交加呀,本来这个寒假早上8点都去练车,两个小时之后再来实验室陪伴Linux内核,但是今天教练说没名额考试了,好纠结,不过想想就可 ...

  6. 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索

    原文:[高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公 ...

  7. 悟透Javascript undefined,null,"",0这四个值转换为逻辑值时就是false &this关键字

    话题一:undefined,null,"",0这四个值转换为逻辑值时就是false 也就是在if判断时会把上面的五个作为false来判断.但是它们的类型确是不尽相同的,如下所示. ...

  8. DotNetBar for Windows Forms 14.0.0.3_冰河之刃重打包版原创发布

    关于 DotNetBar for Windows Forms 14.0.0.3_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  9. 一文上手Tensorflow2.0(四)

    系列文章目录: Tensorflow2.0 介绍 Tensorflow 常见基本概念 从1.x 到2.0 的变化 Tensorflow2.0 的架构 Tensorflow2.0 的安装(CPU和GPU ...

随机推荐

  1. HDU 6020---MG loves apple(枚举)

    题目链接 Problem Description MG is a rich boy. He has n apples, each has a value of V(0<=V<=9). A ...

  2. activitemq整合spring

    activitemq整合spring 一.activmq的点对点模型 pom.xml: <?xml version="1.0" encoding="UTF-8&qu ...

  3. C#效率优化(2)-- 方法内联

    一.JIT编译器可以通过将方法内联展开(Method Inline Expansion)来提升效率,类似C++中的内联函数(Inline Function),与C++的内联函数不同的是,C#并不支持内 ...

  4. 在centos上使用yum安装rabbitmq-server

    rabbitmq及其依赖环境 rabbitmq安装之前需要安装socat,否则直接安装rabbitmq可能会报错 如果没有找到,则先安装epel源 yum -y install epel-releas ...

  5. 进程间通信IPC-管道

    管道是UNIX系统IPC的最古老的形式,所有的UNIX系统都提供此通讯机制.管道有以下两种局限性: 1, 历史上,它们是半双工的(即数据只能在一个方向上流动).现在某些系统提供了全双工管道,但是为了最 ...

  6. js-ES6学习笔记-const命令

    1.const声明一个只读的常量.一旦声明,常量的值就不能改变. 2.const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值. 3.const的作用域与l ...

  7. netty源码解解析(4.0)-10 ChannelPipleline的默认实现--事件传递及处理

    事件触发.传递.处理是DefaultChannelPipleline实现的另一个核心能力.在前面在章节中粗略地讲过了事件的处理流程,本章将会详细地分析其中的所有关键细节.这些关键点包括: 事件触发接口 ...

  8. jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配

    指定元素中包含 id 属性的, 如: $("span[id]") 代码如下: <span id="span1" name="S1"&g ...

  9. 【github&&git】2、github入门到上传本地项目

    [在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ...

  10. 微信公共号:CTO技术总监

    业务价值胜过技术策略: 战略目标胜过具体项目的效益: 内置的互操作胜过定制的集成: 共享服务胜过特定目标的实现: 灵活性胜过优化: 不断演进地提炼胜过在最开始追求完美!