Django项目开发(二):建表

一、建表
在这里插入图片描述
1、用户
a. 用户表
在这里插入图片描述

path: GuLiEdu\apps\users\models.py

from django.db import models
from django.contrib.auth.models import AbstractUser
from datetime import datetime
# Create your models here.
# 用户信息表(数据库中自带email)
class UserProfile(AbstractUser):
    image = models.ImageField(upload_to='user/',max_length=200,verbose_name="用户头像",null=True,blank=True)
    nick_name = models.CharField(max_length=20,verbose_name="用户昵称",null=True,blank=True)
    birthday = models.DateField(verbose_name="用户生日",null=True,blank=True)
    gender = models.CharField(choices=(('girl','女'),('boy','男')),max_length=10,verbose_name="用户性别",default='girl')
    address = models.CharField(max_length=200,verbose_name="用户地址",null=True,blank=True)
    phone = models.CharField(max_length=11,verbose_name="用户手机",null=True,blank=True)
    #这个字段控制激活
    is_start = models.BooleanField(default=False,verbose_name="是否激活")
    add_time = models.DateTimeField(default=datetime.now,verbose_name="添加时间")

    def __str__(self):
        return self.username

    def get_msg_counter(self):
        from operations.models import UserMessage
        counter = UserMessage.objects.filter(message_man = self.id,message_status=False).count()
        return counter


    class Meta:
        verbose_name = '用户信息'
        verbose_name_plural = verbose_name


# 轮播图表
class BannerInfo(models.Model):
    image = models.ImageField(upload_to='banner/',verbose_name="轮播图片",max_length=200)
    url = models.URLField(default='http://www.atguigu.com',max_length=200,verbose_name="图片链接")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    def __str__(self):
        return str(self.image)

    class Meta:
        verbose_name = '轮播图信息'
        verbose_name_plural = verbose_name


# 邮箱验证码表
class EmailVerifyCode(models.Model):
    code = models.CharField(max_length=20,verbose_name="邮箱验证码")
    email = models.EmailField(max_length=200,verbose_name="验证码邮箱")
    send_type = models.IntegerField(choices=((1,'register'),(2,'forget'),(3,'change')),verbose_name="验证码类型")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    def __str__(self):
        return self.code

    class Meta:
        verbose_name = '邮箱验证码信息'
        verbose_name_plural = verbose_name

2、机构
在这里插入图片描述
详情页
在这里插入图片描述

path: GuLiEdu\apps\orgs\models.py

from django.db import models
from datetime import datetime
from DjangoUeditor.models import UEditorField
# Create your models here.
# 城市表
class CityInfo(models.Model):
    name = models.CharField(max_length=20,verbose_name="城市名称")
    add_time = models.DateTimeField(default=datetime.now,verbose_name="添加时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '城市信息'
        verbose_name_plural = verbose_name


# 机构表
class OrgInfo(models.Model):
    image = models.ImageField(upload_to='org/',max_length=200,verbose_name="机构封面")
    name = models.CharField(max_length=20,verbose_name="机构名称")
    course_num = models.IntegerField(default=0,verbose_name="课程数")
    study_num = models.IntegerField(default=0,verbose_name="学习人数")
    address = models.CharField(max_length=200,verbose_name="机构地址")
    desc = models.CharField(max_length=200,verbose_name="机构简介")
    detail = UEditorField(verbose_name='机构详情',
	                         width=700,
	                         height=400,
	                         toolbars='full',
	                         imagePath='ueditor/images/',
	                         filePath='ueditor/files/',
	                         upload_settings={'imageMaxSizing':1024000},
	                         default='')

    love_num = models.IntegerField(default=0,verbose_name="收藏数")
    click_num = models.IntegerField(default=0,verbose_name="访问量")
    category = models.CharField(choices=(('pxjg','培训机构'),('gx','高校'),('gr','个人')),max_length=10,verbose_name="机构类别")
    cityinfo = models.ForeignKey(CityInfo,verbose_name="所在城市")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '机构信息'
        verbose_name_plural = verbose_name


# 讲师表
class TeacherInfo(models.Model):
    image = models.ImageField(upload_to='teacher/', max_length=200, verbose_name="讲师头像")
    name = models.CharField(max_length=20,verbose_name="讲师姓名")
    work_year = models.IntegerField(default=3,verbose_name="工作年限")
    work_position = models.CharField(max_length=20,verbose_name="工作职位")
    work_style = models.CharField(max_length=20,verbose_name="教学特点")
    work_company = models.ForeignKey(OrgInfo,verbose_name="所属机构")
    age = models.IntegerField(default=30,verbose_name="讲师年龄")
    gender = models.CharField(choices=(('boy','男'),('girl','女')),max_length=10,verbose_name="讲师性别",default='boy')
    love_num = models.IntegerField(default=0, verbose_name="收藏数")
    click_num = models.IntegerField(default=0, verbose_name="访问量")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '讲师信息'
        verbose_name_plural = verbose_name


3、课程
课程表
在这里插入图片描述
详情页
在这里插入图片描述
在这里插入图片描述

path: GuLiEdu\apps\courses\models.py

from django.db import models
from datetime import datetime
from orgs.models import OrgInfo,TeacherInfo
# Create your models here.
# 课程表
class CourseInfo(models.Model):
    image = models.ImageField(upload_to='course/',max_length=200,verbose_name="课程封面")
    name = models.CharField(max_length=20,verbose_name="课程名称")
    study_time = models.IntegerField(default=0,verbose_name="学习时长")
    study_num = models.IntegerField(default=0,verbose_name="学习人数")
    level = models.CharField(choices=(('gj','高级'),('zj','中级'),('cj','初级')),max_length=5,verbose_name="课程 难度",default='cj')
    love_num = models.IntegerField(default=0,verbose_name="收藏数")
    click_num = models.IntegerField(default=0,verbose_name="访问量")
    desc = models.CharField(max_length=200,verbose_name="课程简介")
    detail = models.TextField(verbose_name="课程详情")
    category = models.CharField(choices=(('qd','前端开发'),('hd','后端开发')),verbose_name="课程类别",max_length=5)
    course_notice = models.CharField(max_length=200,verbose_name="课程公告")
    course_need = models.CharField(max_length=100,verbose_name="课程须知")
    teacher_tell = models.CharField(max_length=100,verbose_name="老师教导")
    orginfo = models.ForeignKey(OrgInfo,verbose_name="所属机构")
    teacherinfo = models.ForeignKey(TeacherInfo,verbose_name="所属讲师")
    is_banner = models.BooleanField(default=False,verbose_name="是否轮播")
    add_time = models.DateTimeField(default=datetime.now,verbose_name="添加时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '课程信息'
        verbose_name_plural = verbose_name

# 章节表
class LessonInfo(models.Model):
    name = models.CharField(max_length=50,verbose_name="章节名称")
    courseinfo = models.ForeignKey(CourseInfo,verbose_name="所属课程")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '章节信息'
        verbose_name_plural = verbose_name


class VideoInfo(models.Model):
    name = models.CharField(max_length=50, verbose_name="视频名称")
    study_time = models.IntegerField(default=0,verbose_name="视频时长")
    url = models.URLField(default='http://www.atguigu.com',verbose_name="视频链接",max_length=200)
    lessoninfo = models.ForeignKey(LessonInfo,verbose_name="所属章节")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '视频信息'
        verbose_name_plural = verbose_name


# 资源表
class SourceInfo(models.Model):
    name = models.CharField(max_length=50, verbose_name="资源名称")
    down_load = models.FileField(upload_to='source/',max_length=200,verbose_name="下载路径")
    courseinfo = models.ForeignKey(CourseInfo,verbose_name="所属课程")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '资源信息'
        verbose_name_plural = verbose_name

4、操作
在这里插入图片描述

path: GuLiEdu\apps\operations\models.py

from django.db import models
from datetime import datetime
from users.models import UserProfile
from courses.models import CourseInfo
# Create your models here.
# 用户咨询表
class UserAsk(models.Model):
    name = models.CharField(max_length=30,verbose_name="姓名")
    phone = models.CharField(max_length=11,verbose_name="手机")
    course = models.CharField(max_length=20,verbose_name="课程")
    add_time = models.DateTimeField(default=datetime.now,verbose_name="添加时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '咨询信息'
        verbose_name_plural = verbose_name

# 收藏表
class UserLove(models.Model):
    love_man = models.ForeignKey(UserProfile,verbose_name="收藏用户")
    love_id = models.IntegerField(verbose_name="收藏id")
    love_type = models.IntegerField(choices=((1,'机构'),(2,'课程'),(3,'讲师')),verbose_name="收藏类别")
    love_status = models.BooleanField(default=False,verbose_name="收藏状态")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="收藏时间")

    def __str__(self):
        return self.love_man.username

    class Meta:
        verbose_name = '收藏信息'
        verbose_name_plural = verbose_name
        
#用户课程表(注意联合)
class UserCourse(models.Model):
    study_man = models.ForeignKey(UserProfile, verbose_name="学习用户")
    study_course = models.ForeignKey(CourseInfo,verbose_name="学习课程")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="学习时间")

    def __str__(self):
        return self.study_man.username

    class Meta:
        unique_together = ('study_man','study_course')   #联合在一起,下一次学习就不会添加
        verbose_name = '用户学习课程信息'
        verbose_name_plural = verbose_name


# 用户评论表
class UserComment(models.Model):
    comment_man = models.ForeignKey(UserProfile, verbose_name="评论用户")
    comment_course = models.ForeignKey(CourseInfo, verbose_name="评论课程")
    comment_content = models.CharField(max_length=300,verbose_name="评论内容")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="评论时间")

    def __str__(self):
        return self.comment_content

    class Meta:
        verbose_name = '用户评论课程信息'
        verbose_name_plural = verbose_name

# 用户消息表
class UserMessage(models.Model):
    message_man = models.IntegerField(default=0,verbose_name="消息用户")
    message_content = models.CharField(max_length=200,verbose_name="消息内容")
    message_status = models.BooleanField(default=False,verbose_name="消息状态")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    def __str__(self):
        return self.message_content

    class Meta:
        verbose_name = '用户消息信息'
        verbose_name_plural = verbose_name

二、迁移
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值