上一节介绍了DRF开发的基本流程,共五个步骤:

  1 创建模型

  2 创建序列化器

  3 编写视图

  4 配置URL

  5 运行测试

  本节主要讲解创建模型。

  构建学校,教师,学生三个模型,这三个模型之间的关系是:学校和教师是一对多的关系,教师和学生是多对多的关系。为了更直观的体现多对多的关系,把一个多对多,转化为两个一对多。需要另外创建一个教师学生模型,用于标注教师和学生的对应关系。

  因此,本节主要构建四个模型。全部存在Applications/Examples/models.py文件中。

  在Django中,所有模型的创建都必须继承models。因此,在models.py文件中,默认就引用了这个包。

from django.db import models

1 学校模型

class Schools(models.Model):
name = models.CharField(max_length=50, help_text='学校名称')
email = models.EmailField(max_length=100, help_text='电子邮箱')
phone = models.CharField(max_length=14, help_text='学校座机')
employment_rate = models.FloatField(help_text='就业率') class Meta:
db_table = 'Schools' def __str__(self):
return self.name

2 教师模型

class Teachers(models.Model):
name = models.CharField(max_length=20, help_text='老师姓名')
school = models.ForeignKey(to=Schools, on_delete=models.CASCADE, help_text='所属学校') class Meta:
db_table = 'Teachers' def __str__(self):
return self.name

3 学生模型

class Students(models.Model):
name = models.CharField(max_length=20, help_text='学生姓名')
SEX_CHOICE = (
(0, '男'),
(1, '女')
)
sex = models.IntegerField(choices=SEX_CHOICE, help_text='性别')
subject = models.CharField(max_length=30, help_text='所选科目')
school = models.ForeignKey(to=Schools, on_delete=models.CASCADE, help_text='所属学校') class Meta:
db_table = 'Students' def __str__(self):
return self.name

4 教师学生模型

class TeacherAndStudent(models.Model):
teacher = models.ForeignKey(to=Teachers, on_delete=models.CASCADE, help_text='老师')
student = models.ForeignKey(to=Students, on_delete=models.CASCADE, help_text='学生') class Meta:
db_table = 'TeacherAndStudent' def __str__(self):
return self.teacher.name + '/' + self.student.name  

  模型建好后,要执行数据迁移。在PyCharm Terminal下执行:

python manage.py makemigrations
python manage.py migrate

0009 基于DRF框架开发(02 创建模型)的更多相关文章

  1. 0010 基于DRF框架开发(03 模型序列化器)

    序列化器:是指从数据库提取数据,转化前端所需要的数据格式并返回到前端. 反序列化器:是指把前端传回的数据,转换成数据库需要的格式,存入数据库. DRF提供了两种序列化器: 模型序列化器:是指和模型关联 ...

  2. 0008 基于DRF框架开发(01 DRF开发的基本流程)

    1 创建模型 由于之前在<004 工程配置>中,已在Applications/Organizations/models中创建了一个UserInfo模型.此处引用这个模型. from dja ...

  3. 0014 基于DRF框架开发(02 基类视图 GenericAPIView)

    前端于对数据操作的请求基本上就分为四类:增删改查,即增加.删除.修改.查询. 而DRF把前端请求分为两个大类:带ID参数请求和不带ID参数请求. 不带ID参数请求包括:增加.分布多条查询 带ID参数请 ...

  4. 0013 基于DRF框架开发(01 基类视图 APIView)

    之前学习了模型序列化和普通序列化,我们用最简单的视图和url实现了对序列化的操作. 而实际上,象之前那种由DRF自动生成所有的视图和url的情况,在应用是使用很少.而需要用户根据实际业务需求,自定义视 ...

  5. 0011 基于DRF框架开发(04 普通序列化器)

    普通序列化器和模型无关,只是对针对提交字段的定义. 本文定义三个序列化器: 教师序列化器,学生序列化器,教师学生序列化器.这三个序列化器都使用普通序列化器. 1 教师序列化器 在Application ...

  6. 0012 基于DRF框架开发(04 序列化器的字段与选项)

    1 常用字段类型 字段 构造方式 BooleanField BooleanField() NullBooleanField NullBooleanField() CharField CharField ...

  7. MapReduce教程(一)基于MapReduce框架开发<转>

    1 MapReduce编程 1.1 MapReduce简介 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,用于解决海量数据的计算问题. MapReduce分成了两个部分: ...

  8. 基于SSH框架开发的《高校大学生选课系统》的质量属性的实现

    基于SSH框架开发的<高校大学生选课系统>的质量属性的实现 对于可用性采取的是错误预防战术,即阻止错误演变为故障:在本系统主要体现在以下两个方面:(1)对于学生登录模块,由于初次登陆,学生 ...

  9. 基于NopCommerce框架开发的微信小程序UrShop

    Urshop小程序商城 介绍 UrShop小程序商城 2.0发布啦,发布地址https://gitee.com/urselect/urshop UrShop 根据NopCommerce框架开发的,基于 ...

随机推荐

  1. JUC中的锁

    ★.不同角度的锁的理解: #1.公平锁.非公平锁 公平锁:eg: ReentrantLock 关键词:先来先服务. 加锁前检查是否有排队等锁的线程,若有,当前线程参与排队,先排的线程优先获取锁.相对没 ...

  2. BurpSuite--代理和浏览器设置

    上一篇文章我们完成了JAVA环境的搭建和burpsuite的安装,接下来请大家和我一起一步一步的完成burpsuite的代理和浏览器的相关设置. 关注“白帽技术与网络安全”获取安装包 1.设置浏览器代 ...

  3. LeetCode 126. Word Ladder II 单词接龙 II(C++/Java)

    题目: Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transfo ...

  4. 图像里的"白噪声"——电视机搜不到台时雪花斑点的形成原因

    作者:❄️固态二氧化碳❄️ (主页) 链接:图像里的"白噪声"--电视机搜不到台时雪花斑点的形成原因 - 固态二氧化碳的博客 - CSDN博客 来源:CSDN博客 发表时间:201 ...

  5. k8s系列---网络插件flannel

    跨节点通讯,需要通过NAT,即需要做源地址转换. k8s网络通信: 1) 容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现: 2) pod之间的通信,pod ip <---> ...

  6. k8s系列---部署集群

    docer启动出错 [root@centos-minion yum.repos.d]# systemctl start docker Job for docker.service failed bec ...

  7. css实现文字过长显示省略号的方法

    <div class="title">当对象内文本溢出时显示省略标记</div> 这是一个例子,其实我们只需要显示如下长度: css实现网页中文字过长截取. ...

  8. vue路由--嵌套路由

    静态嵌套路由: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  9. 【转】Redis内部数据结构详解——ziplist

    本文是<Redis内部数据结构详解>系列的第四篇.在本文中,我们首先介绍一个新的Redis内部数据结构--ziplist,然后在文章后半部分我们会讨论一下在robj, dict和zipli ...

  10. Shiro知识初探(更新中)

    Shiro 是当下常见的安全框架,主要用于用户验证和授权操作. RBAC 是当下权限系统的设计基础,同时有两种解释:一: Role-Based Access Control,基于角色的访问控制即,你要 ...