模型类关系

关系字段类型

关系型数据库的关系包括三种类型:

  • ForeignKey:一对多,将字段定义在多的一端中。
  • ManyToManyField:多对多,将字段定义在两端中。
  • OneToOneField:一对一,将字段定义在任意一端中。
一对多关系:
  1. #定义图书模型类BookInfo
  2. class BookInfo(models.Model):
  3. btitle = models.CharField(max_length=20)#图书名称
  4. bpub_date = models.DateField()#发布日期
  5. bread = models.IntegerField(default=0)#阅读量
  6. bcomment = models.IntegerField(default=0)#评论量
  7. isDelete = models.BooleanField(default=False)#逻辑删除
  8.  
  9. #定义英雄模型类HeroInfo
  10. class HeroInfo(models.Model):
  11. hname = models.CharField(max_length=20)#英雄姓名
  12. hgender = models.BooleanField(default=True)#英雄性别
  13. isDelete = models.BooleanField(default=False)#逻辑删除
  14. hcontent = models.CharField(max_length=200)#英雄描述信息
  15. hbook = models.ForeignKey('BookInfo')#英雄与图书表的关系为一对多,所以属性定义在英雄模型类中
多对多关系:
  1. class TypeInfo(models.Model):
  2. tname = models.CharField(max_length=20) #新闻类别
  3.  
  4. class NewsInfo(models.Model):
  5. ntitle = models.CharField(max_length=60) #新闻标题
  6. ncontent = models.TextField() #新闻内容
  7. npub_date = models.DateTimeField() #新闻发布时间
  8. ntype = models.ManyToManyField('TypeInfo') #通过ManyToManyField建立TypeInfo类和NewsInfo类之间多对多的关系

自关联:

对于地区信息、分类信息等数据,表结构非常类似,每个表的数据量十分有限,为了充分利用数据表的大量数据存储功能,可以可以设计成一张表,内部的关系字段指向本表的主键,这就是自关联的表结构。

  1. #定义地区模型类,存储省、市、区县信息
  2. class AreaInfo(models.Model):
  3. atitle=models.CharField(max_length=30)#名称
  4. aParent=models.ForeignKey('self',null=True,blank=True)#关系

关联查询:

1 由多到一的访问语法:

  1. 一对应的模型类对象.多对应的模型类名小写_set
  1. b = BookInfo.objects.get(id=1)
  2. b.heroinfo_set

2 由多到一的访问语法:

  1. 多对应的模型类对象.多对应的模型类中的关系类属性名
  1. h = HeroInfo.objects.get(id=1)
  2. h.hbook
  1. #多对应的模型类对象.关联类属性_id
  2. h = HeroInfo.objects.get(id=1)
  3. h.book_id
  1.  

django的models模型 关联关系和关系查询的更多相关文章

  1. django的models模型类的常用数据类型和选项

    django框架的models模块ORM框架,能够让我们通过编写类的方式,帮助我们自动生成数据库表. 生成的数据库表名为 应用模块名称_类名 数据库表中字段名 如果我们没有在参数中指定,就是我们写的类 ...

  2. Django中ORM模型总结(一)[概述,查询语句]

    理解ORM框架 概述 O:(objects)->类和对象. R:(Relation)->关系,关系数据库中的表格. M:(Mapping)->映射. 作用: 可以通过类和类对象就可以 ...

  3. 07 模型层 orm相关查询 F查询Q查询 django开启事务

    一.Django终端打印SQL语句 如果你想知道你对数据库进行操作时,Django内部到底是怎么执行它的sql语句时可以加下面的配置来查看 在Django项目的settings.py文件中,在最后复制 ...

  4. django的models模块查询方法

    假定models中有一个类BookInfo 模块查询不同于sql语句,模块查询的结果会返回符合条件的整个一行的对象,或者多个对象组成的查询集. 查询集类似列表,有相似的方法. 1 model查询语句: ...

  5. django 之MTV模型

    一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model(模型):和数据库相关的,负 ...

  6. Django之ORM-model模型属性

    Django1.8.2中文文档:Django1.8.2中文文档 或者 https://yiyibooks.cn/xx/django_182/index.html 项目准备 注释:关于项目准备,其实和后 ...

  7. <Django> MVT三大块之Models(模型)

    1.ORM(对象-关系-映射)---面向对象,不需要面向SQL语句 根据对象的类型生成表结构 将对象.列表的操作,转化成SQL语句 将SQL语句查询的结果转化成对象.列表 目的:实现数据模型与数据库的 ...

  8. 057.Python前端Django模型ORM多表查询

    一 基于对象的查询 1.1 一对多查询 设计路由 from django.contrib import admin from django.urls import path from app01 im ...

  9. Django之ORM-model模型关系

    模型类关系 1)一对多关系例:图书类-英雄类 models.ForeignKey() 定义在多的类中. 2)多对多关系例:新闻类-新闻类型类 体育新闻 国际新闻models.ManyToManyFie ...

随机推荐

  1. RDP 拒绝服务攻击

    先看一下百度百科怎么定义的 靶机ip  Win7: 192.168.123.19 Win7开远程桌面,为方便测试 需关闭防火墙 kali打开msf 进入  use auxiliary/dos/wind ...

  2. AvalonJS前端开发源码

    avBody = avalon.define("avBody", function (vm) { vm.Address = "";//地址 vm.BrandMo ...

  3. ubuntu下ftp服务

    (1).首先用命令检查是否安装了vsftpd vsftpd -version 如果未安装用一下命令安装 sudo apt-get install vsftpd 安装完成后,再次输入vsftpd -ve ...

  4. AndroidStudio R 文件标红

    一种不常见的问题 AndroidStudio 文件大小会有一定的限制,超过一定大小将无法解析.大型的Android项目容易出现这个问题. 可以按照下面的步骤解决这个问题: 在AndroidStudio ...

  5. shell脚本里获取字符串的最后一个字符

    STR=123456abc FINAL=`echo ${STR: -1}` 或者 FINAL=${STR: -1} 都可以让FINAL获得c这个最后一个字符  

  6. linux --> Makefile编写

    Makefile编写 单目录 测试程序在同一个文件中,共有func.h.func.c.main.c三个文件,Makefile写法如下所示: CC = gcc CFLAGS = -g -Wall mai ...

  7. java性能调优---------------------JVM调优方案

    JVM的调优的主要过程有: 1.确定堆内存大小(-Xmx.-Xms) 2.合理分配新生代和老年代(-XX:NewRatio.-Xmn.-XX:SurvivorRatio) 3.确定永久区大小(-XX: ...

  8. Matlab绘图基础——给图像配文字说明(text对象)

      text对象 (1)text(x坐标,y坐标,'string')在图形中指定位置(x,y)显示字符串string.(2)Editing有效值为on/off,off时,用户在执行GUI操作时无法直接 ...

  9. fail2ban 防止ssh暴力破解

    1.环境 CentOS 7 2.在线安装 yum install -y epel-release yum install -y fail2ban fail2ban 结构 /etc/fail2ban   ...

  10. 第1次作业:no blog no fun

    1.先回答老师的问题 第一部分:结缘计算机       读了进入2012 -- 回顾我走过的编程之路后,我试着回顾了我的编程生涯的开始.我最原始的记忆就是老爸教我用电脑玩连连看,那时候的显示器应该是C ...