美文网首页
7、Django_模型类开发示例

7、Django_模型类开发示例

作者: 猪儿打滚 | 来源:发表于2019-09-30 16:18 被阅读0次
一、示例的表关系

这里需注意表与表之间的主从表关系,因为外键字段需要在主表(“多”的表)
1.对于助教来说,导师是从表
2.对于学生来说,课程是从表
3.对于课程来说,导师是从表
PS.
主从表的确定,需要从业务角度来确定。比如说如果这个系统是开发给老师用的,那么课程是主表;如果开发给学生用的,那么学生是主表。

表关系
二、编写代码

1.创建一个名为class的应用:python manage.py startapp class
2.在settings.py文件进行注册该应用,添加:'class.apps.ClassConfig'
3.编写Model类:class/models.py

from django.db import models
"""
author:lzl
"""

# Create your models here.

class Teacher(models.Model):
    """ 导师信息表 """
    nickname = models.CharField(max_length=50, primary_key=True, db_index=True, verbose_name='昵称')  # 主键、索引
    introduction = models.TextField(default='这位导师还没添加个人简介', verbose_name='简介')
    fans = models.PositiveIntegerField(default='0', verbose_name='关注数')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')

    class Meta:
        verbose_name = '导师信息表'
        verbose_name_plural = verbose_name

    def __str__(self):  # python2是__unicode__
        return self.nickname


class Course(models.Model):
    """ 课程信息表 """
    title = models.CharField(max_length=100, primary_key=True, db_index=True, verbose_name='课程名')
    teacher = models.ForeignKey(Teacher, null=True, blank=True, on_delete=models.CASCADE,
                                verbose_name='课程导师')  # 多对一外键,对应Teacher表。如果老师被删除了,那么对应的课程则被删除
    type = models.CharField(choices=((0, '其它'), (1, '免费课'), (2, '付费课')), max_length=1, default=0,
                            verbose_name='课程类型')  # choices,对应数据库的枚举,节省空间,且提高效率
    price = models.PositiveSmallIntegerField(verbose_name='价格')
    volume = models.BigIntegerField(verbose_name='销量')
    online = models.DateField(verbose_name='上线时间')
    created_time = models.DateTimeField(auto_created=True, verbose_name='创建时间')
    updated_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')

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

    def __str__(self):
        return F'{self.get_type_display()} - {self.title}'  # 获取type中元组索引对应的值,并和title进行拼接显示


class Student(models.Model):
    """ 学生信息表 """
    nickname = models.CharField(primary_key=True, max_length=50, db_index=True, verbose_name='昵称')
    course = models.ManyToManyField(Course, verbose_name='课程')  # 多对多,对应课程表
    age = models.PositiveSmallIntegerField(verbose_name='年龄')
    gender = models.CharField(choices=((0, '保密'), (1, '男'), (2, '女')), max_length=1, default=0, verbose_name='性别')
    study_time = models.PositiveIntegerField(default='0', verbose_name='学习时长/h')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')

    class Meta:
        verbose_name = '学生信息表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.nickname


class TeacherAssistant(models.Model):
    """ 助教信息表 """
    nickname = models.CharField(max_length=30, primary_key=True, db_index=True, verbose_name='昵称')
    teacher = models.OneToOneField(Teacher, on_delete=models.SET_NULL, null=True, blank=True,
                                   verbose_name='导师')  # 一对一外键,导师被删除,助教依旧保留
    hobby = models.CharField(max_length=100, null=True, blank=True, verbose_name='爱好')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')

    class Meta:
        verbose_name = '助教信息表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.nickname

4.迁移数据表

python manage.py  makemigrations    # 生成migrations临时文件
python manage.py  migrate           # 根据migrations直接生成数据库
结果: 创建成功

查看表的关联关系:


查看表的关联关系
创建的所有表
相关表

相关文章

  • 7、Django_模型类开发示例

    一、示例的表关系 这里需注意表与表之间的主从表关系,因为外键字段需要在主表(“多”的表)1.对于助教来说,导师是从...

  • Validation:模型选择

    二分类示例引入 模型选择问题 分析过程 123

  • 24. Flask 自定义模型类

    自定义模型类 本篇章介绍Flask自定义模型类的概念,以及写一个快速入门的示例,基本内容如下: 定义两个模型类,并...

  • 面向对象初体验(类和对象)

    了解面向对象我们先来看几个示例: (1) 汽车开发示例:类对象 我们从汽车开发示例可以看出,两种不同的思想 一种是...

  • 10、Django_模型类的继承以及用包来管理模型类

    面向对象语言的三大特性:多态、封装、继承。Django中模型类也拥有这些特性,本章说明下模型类的继承 概述 Dja...

  • QuerySet常规操作

    示例演示 QuerySet常规操作 创建模型类 from django.db import models clas...

  • Django安装教程

    windows下安装Django_百度经验

  • Swift开源项目精选

    “轮子”工具类存储类网络类图片类界面类框架类 “车子”示例项目完整应用 “轮子”工具类项目开发者备注 Swifty...

  • 网络参考模型

    网络模型 OSI 开发系统互联(Open System Interconnection) OSI参考模型 分为7部...

  • 表单

    1.Meta描述:表单类中的元数据,指明表单与模型类的联系。示例: 2.form.as_p功能:展示表单,常用在模...

网友评论

      本文标题:7、Django_模型类开发示例

      本文链接:https://www.haomeiwen.com/subject/bkmcpctx.html