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. 线程误区-join,wait(里边还是调用的wait)

    1.一个线程执行结束后会执行该线程自身对象的notifyAll方法,这个是在jvm中实现的. 2.join的作用是:当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程(thread ...

  2. [视频]K8飞刀 正则采集WordPress站点用户

    链接:https://pan.baidu.com/s/16NCuC-mD4-3dxfVdcIFkxg 提取码:k3bw

  3. LintCode翻转字符串问题 - python实现

    题目描述:试实现一个函数reverseWords,该函数传入参数是一个字符串,返回值是单词间做逆序调整后的字符串(只做单词顺序的调整即可). 例如:传入参数为"the sky is blue ...

  4. 在Kubernetes中部署GlusterFS+Heketi

    目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...

  5. MongoDB 日志切割三种方式

    MongoDB 日志切割 ​ MongoDB 默认是不会进行切割日志的,除非我们配置了 logRotate = rename,并且重启 MongoDB 服务,才会进行切割日志的,那么为了避免实际中我们 ...

  6. C#字符串分割成列表及相反转换

    在实际开发中,一些老系统,特别是ERP,在做数据交换的时候,保存的是文本格式,然后以一个特殊符号隔开.如 2018-01-02 12:33:20#24.4#20.0|2018-01-03 11:33: ...

  7. 附实例!实现iframe父窗体与子窗体的通信

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 本文主要会介绍如何基于MessengerJS,实现iframe父窗体与子窗体间的通信,传递数据信息.同时本 ...

  8. 搭建jenkins集群

    搭建jenkins集群是为了解决单点服务器存在的性能瓶颈,也有业务的需要,比如:java服务打包的环境我们需要linux,ios打包的服务器需要mac机. 一.创建agent节点 1.打开 系统管理- ...

  9. python的Web框架,auth权限系统

    使用django默认权限系统实现用户登录退出 判断用户是否登录 request.user.is_authenticated 返回的为bool值 一个简单的登录视图范式: # 导包 from djang ...

  10. set get del

    //设置 $ob = new Redis(); $ob->connect('127.0.0.1', 6379); $re = $ob->set('str1', serialize(['a' ...