正向和反向查询
正向 ----> 关联字段在当前表中,从当前表向外查叫正向
反向 —> 关联字段不在当前表中,当当前表向外查叫反向
正向通过字段,反向通过表名查

表结构

from django.db import models

class Author(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField() #主表
class Book(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
price = models.IntegerField()
#一对多字段
publish = models.ForeignKey('Publish', related_name='book', on_delete=models.CASCADE)
#多对多字段
authors = models.ManyToManyField('Author',related_name='author_book')

class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)

一对多 ForeignKey

book – > publish :一个出版社有多个书

正向:

1、基于字段:obj.(外键).属性

因为book表中有publish字段。所以正向查询书的出版社
book_obj = mdoels.Book.objects.filter(nid=1).first()
book_obj.publish.name

反向:obj.(表名小写_set).all() 或者 obj.  book (related_name='book') .all()
1、set查询

 因为publish没有book字段。要查询关于book的内容,就需要做反向查询

 publish_obj=models.Publish.objects.filter(nid=1).first()
books = publish_obj.book_set.all() #如果Book表中没有related_name=‘book’用这方式
books = publish_obj.book.all() #Book表中有related_name=‘book’
for book in books:
print(book.title)

多对多 ManyToManyField

正向:

1、基于字段:obj.(外键).all()

 book_obj = models.Book.objects.get(pk=1).first() 先拿到要查的对象

 author = book_obj.authors.all() 查到这一本书关联的作者对象

 for a in author:
print(a.name,a.age) 循环遍历作者对象,拿到作者的属性

反向:

obj.(表名小写_set).all() 或者 obj. author_book(related_name='author_book') .all()
1、set查询

#set查询
authorobj = models.Author.objects.filter(nid=1).first()
books = authorobj.book_set.all()
for book in books:
print(book.title) #related_name查询方式
authorobj= models.Author.objects.filter(nid=1).first()
books = authorobj.author_book.all()
for book in books:
print(book.title)

Django ORM各种查询的更多相关文章

  1. Django orm进阶查询(聚合、分组、F查询、Q查询)、常见字段、查询优化及事务操作

    Django orm进阶查询(聚合.分组.F查询.Q查询).常见字段.查询优化及事务操作 聚合查询 记住用到关键字aggregate然后还有几个常用的聚合函数就好了 from django.db.mo ...

  2. django orm 的查询条件

    Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的查询条件来实现复 ...

  3. Django orm 常用查询筛选总结

    本文主要列举一下django orm中的常用查询的筛选方法: 大于.大于等于 小于.小于等于 in like is null / is not null 不等于/不包含于 其他模糊查询 model: ...

  4. django orm高级查询 F表达式和Q表达式以及分组annotate

    1.关联关系映射及查询1.1django默认开启延迟加载所有多对1和1对1如果不使用select_related(),需要会延迟加载获取到相关对象,因为延迟可能会造成n+1次查询的问题,所以便有了se ...

  5. Django ORM (三) 查询,删除,更新操作

    ORM 查询操作 修改 views.py 文件 from django.shortcuts import render, HttpResponse from app01 import models f ...

  6. Python - Django - ORM 分组查询补充

    单表查询: models.py: from django.db import models class Employee(models.Model): name = models.CharField( ...

  7. Python - Django - ORM F查询和Q查询

    models.py: from django.db import models # 出版社 class Publisher(models.Model): id = models.AutoField(p ...

  8. Python - Django - ORM 聚合查询和分组查询

    models.py: from django.db import models # 出版社 class Publisher(models.Model): id = models.AutoField(p ...

  9. Django ORM 反向查询

    一/一对多反向查询   先定义两个模型,一个是A,一个是B,是一对多的类型. class A(models.Model): name= models.CharField('名称', max_lengt ...

  10. django ORM常用查询条件

    假设有一个模型 class Article(models.Model): title=models.CharField(max_length=50) content=models.TextField( ...

随机推荐

  1. VMware显示错误:“未能锁定文件 无法打开磁盘 ..\*.vmdk 或者某一个快照所依赖的磁盘。”解决办法

    问题描述: 使用VMware时遇到错误:“未能锁定文件 无法打开磁盘 ..\*.vmdk 或者某一个快照所依赖的磁盘.” 问题出现的原因: 虚拟磁盘(.vmdk)本身有一个磁盘保护机制,为了防止多台虚 ...

  2. Scala实践2

    一.Scala基本类型和操作 1.1  基本类型 Scala的基本类型与Java基本类型相同,都是byte.short.int.long.char.string.float.double.boolea ...

  3. 随机算法 - Miller_Rabin pollard_rho

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #in ...

  4. FileUpload的控件上传excel

    在一个使用FileUpload的控件上传excel,读取excel的数据 因为上传的路径一直被限定在C:\Program\IIS\Express 一直限制这个文件下, 想要解决这个问题. 在谷歌浏览器 ...

  5. Webpack实战(一):Webpack打包工具安装及参数配置

    为什么要模块化 javascript跟其他开发语言有很多的区别,其中一个就是没有模块化概念,如果一个项目中有多个js文件,我们只能通过script标签引入的方式,把一个个js文件插入到页面,这种做法会 ...

  6. java 中文乱码问题

    1.要记住的事实 java的class文件是utf-8编码的,jvm使用utf-16,而java的字符串使用unicode编码 2.java支持的字符集 java支持的字符集可以通过java.nio. ...

  7. Java.Json模板.省市区三级JSON

    [ { "name": "北京市", "city": [ { "name": "北京市", &quo ...

  8. 2019CSP复赛游记

    Day 0 作为一个初三的小蒟蒻…… 什么算法都不会打…… 做一道LCA+生成树的图论题调了两个小时…… 明日裸考…… Day 1 Morning 买了两个士力架,带了一盒牛奶,准备在考场上食用(这个 ...

  9. numpy nan和inf

    一.nan和inf的简介 nan 不是一个数字 读取本地文件为flaot的时候,有缺失 inf(infinity): 无穷尽 inf: 正无穷 -inf: 负无穷 数据类型:float # 注意: 要 ...

  10. elasticjob学习一:simplejob初识和springboot整合

    Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成. Elastic-Job-Lite定位为轻量级无中心化解 ...