美文网首页
Django多表查询 1:N类型

Django多表查询 1:N类型

作者: 上帝大人 | 来源:发表于2019-04-18 22:36 被阅读0次

添加外键及遇到的问题在上篇文章已结束

多表查询(1.通过对象和2.通过模型类两种方法)

第二种更好用感觉,第一种还要分两步,第二种一步搞定

注意:

多类一类就是一对多中的

添加的多类模型类的外键的属性名为hbook,但是在数据库中,多类多了一列为hbook_id,在python代码中的叫属性,数据库中的是字段。

  • Person类是多类模型类,BookInfo是一类模型类
  • app_person是多类的,app_bookinfo是一类的

一、 通过模型类的对象查询(这种要分为两步骤)

一对多模型又分为一对多和多对一两种情况

  • 查询三国演义中多有的人物信息,三国演义已知,三国演义是一类,所以问题是一对多。

已知三国演义,先查三国演义,然后得到的.小写多类模型类名_set.all()
或者说一类模型类的对象名.小写多类模型类名set.all()

from app.models import BookInfo
def index(request):
    #查看三国演义中所有的人物信息
    book =BookInfo.objects.get(btitle='三国演义')
    text=''
    persons=book.person_set.all()
    for person in persons:
        text+=str(person.hbook_id)+person.pname
    return HttpResponse(text)

这里遇到了点问题,一直查不出来,还报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence,这是编码方式的问题,也就是乱码,你敲的三国演义不一定是你数据库中的三国演义,你可以改一下数据库或者pycharm的编码方式,或者,你把数据库中的三所演义复制到你所要查询的地方。

  • 查询孙悟空在那本书中,孙悟空是人物名,属于多类,所以问题是多对一。

已知孙悟空,先查孙悟空,然后得到的.多类模型类外键对应的属性名或者说多类模型类的对象名.多类模型类中外键对应的属性名(这里的属性名就是你在models.py中设置的外键的属性的名字)

from app.models import  Person
def index(request):
    person =Person.objects.get(pname='孙悟空') #当然要导入Person这个models
    book = person.hbook
    text=book.btitle
    return HttpResponse(text)

  • 这两种情况中都要先查询已知的内容保存在一个变量中(这个变量的命名我们一般和他所在的表有关系,例如上面一对多的例子中,三国演义已知,他所在表为app_book,所以变量名我们叫做book),然后这个变量的.方法出现分歧
    为什么呢? 一对多:查找到的是多个值,所以.方法是多类模型类名_set.all()是all还是其他区别在于你是select *还是条件查询
    多对一:查询到的结果是一个值,所以不是,直接.外键属性名这里的外键属性名就是你创建模型类时,定义的外键的属性名。

二、通过模型类来查询,更加简洁的方式(一步到位)

也是一对多和多对一两种类型,但是本质相同的,简单记法。


最好把外键属性定义的有另一个类的影子,就像person的外键属性我们定义为了hbook,这样我们就可以理所应当的假设book的外键属性为personinfo(小写的模型类名),只是为了简单记法。

在后面我们会把这些封装在方法中,对外就提供增删改查的方法。

相关文章

  • Django多表查询 1:N类型

    添加外键及遇到的问题在上篇文章已结束 多表查询(1.通过对象和2.通过模型类两种方法) 第二种更好用感觉,第一种还...

  • mysql基础(3)

    多表联查 使用多表查询可以获取M x N行记录(M,N为两个表各自的行数)多表查询的结果集可能非常巨大,要小心使用...

  • 多表连接查询

    多表连接查询 -- 1. 预备工作 -- 2. 多表连接的类型 -- 笛卡尔乘积 -- 内连接 (取交集) -- ...

  • django_多表查询

    一、一对多 利用ForeignKey 创建表 注关联表中会自动添加字段后面加_id,相当于publish _id,...

  • SQLAlchemy(四)

    知识要点: 1.多表查询 2.原生SQL的查询 多表查询 在MySQL中我们讲了多表查询,在SQLAlchemy中...

  • python面试题01

    1、什么是多表关联查询,有几种多表关联的查询方式,分别是什么? 多表关联查询概念: 多表关联查询分类:1.1内连接...

  • Django模型(四)

    Django模型 知识点: 表关联对象 多表查询 表关联对象 前向查询 如果一个模型具有ForeignKey,那么...

  • 4.MySQL多表&事务

    主要内容 1 . 多表查询2 . 事务3 . DCL 多表查询: 事务 DCL:

  • Mysql-多表查询as索引

    1、Mysql多表查询2、information_schema 虚拟库3、索引 1、多表查询 方法(1) 根据需求...

  • MySQL多表&事务课堂笔记

    内容 1、多表查询2、事务3、DCL 多表查询: 1.查询语法:select 列名列表 from 表名列表...

网友评论

      本文标题:Django多表查询 1:N类型

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