基于双下划线查询
切记!!!!正向查询按字段,反向查询按表名的小写
正向:在Book表里设置关联Obj表,Book------>Obj就是正向查询
反向:在Book表里设置关联Obj表,Obj------>Book就是反向查询

废话不多说,直接上例子:

 

数据
class Book(models.Model):
nid=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
price=models.DecimalField(max_digits=8,decimal_places=2) # 999999.99
pub_date=models.DateTimeField() # "2012-12-12"
publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE) # 级联删除
authors=models.ManyToManyField(to="Author")
def __str__(self):
return self.title class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
email=models.CharField(max_length=32)
def __str__(self):
return self.name class Author(models.Model):
nid = models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
age=models.IntegerField()
email=models.CharField(max_length=32)
ad=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
def __str__(self):
return self.name class AuthorDetail(models.Model):
addr=models.CharField(max_length=32)
tel=models.IntegerField()
def __str__(self):
return self.addr

以上是4张表,实际在操作中是5张表,有一张虚拟的表,Django自动给我们创建的

一下是各种查询的练习题

 1 查询python这本书出版社的名字
2 查询人民日报出版社出版的所有的书籍的名称
3 查询python这本书籍的作者的年龄
4 查询李二短出版过的所有的书籍名称
5 查询任康娜的手机号
6 查询手机号为234的作者的名字
7查询老男孩出版社出版过的所有书籍的名字以及作者的姓名
8手机号以132开头的作者出版过的所有书籍名称以及出版社名称

答案:

1 查询python这本书出版社的名字
正向:ret = Book.objects.filter(title='python').values('publish__name')
反向:ret = Publish.objects.filter(book__title='python').values('name')
print(ret)
   2 查询人民日报出版社出版的所有的书籍的名称
ret = Publish.objects.filter(name='人民日报出版社').values('book__title')
   ret = Book.objects.filter(Publish__name='人民日报出版社').values('title')
    print(ret) 

3 查询python这本书籍的作者的年龄 
  ret = Book.objects.filter(title='python').values('authors__age')
  ret = Authors.objects.filter(book__title='python').values('age')
  print(ret)
(以下反向查询不一一列举,具体参考前3个)
4 查询李二短出版过的所有的书籍名称 
  ret = Author.objects.filter(name='李二短').values('book__title') print(ret)
  
5 查询任康娜的手机号
  ret = Author.objects.filter(name='任康娜').values('ad__tel') print(ret) 6 查询手机号为234的作者的名字
  ret = AuthorDetail.objects.filter(tel=234).values('author__name') print(ret) 7查询老男孩出版社出版过的所有书籍的名字以及作者的姓名
  ret = Publish.objects.filter(name='老男孩出版社').values('book__title','book__authors__name') print(ret) 8手机号以132开头的作者出版过的所有书籍名称以及出版社名称
  ret = AuthorDetail.objects.filter(tel__startswith=345).values('author__book__title','author__book__publish__name') print(ret)

Django orm查询操作的更多相关文章

  1. Django ORM 查询操作

    queryset中支持链式操作 book=Book.objects.all().order_by('-nid').first() 只要返回的是queryset对象就可以调用其他的方法,直到返回的是对象 ...

  2. Django框架 之 ORM查询操作详解

    Django框架 之 ORM查询操作详解 浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Py ...

  3. Django ORM 查询管理器

    Django ORM 查询管理器 ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言 ...

  4. Django 2.0 学习(16):Django ORM 数据库操作(下)

    Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...

  5. Django 2.0 学习(14):Django ORM 数据库操作(上)

    Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...

  6. Django ORM models操作

    title: Django ORM models操作 tags: Django --- Django ORM models操作 Django ORM基本操作 一.数据库的创建及增删改查 1 使用类创建 ...

  7. django orm查询和后端缓存的使用

    django orm 查询 1 字段后(db_column='age') (null=True)#表示数据库里面的该字段数据可以为空 (blank=True)#表示前端表单提交的时候可以为空 (db_ ...

  8. Django之ORM查询操作详解

    浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Python脚本中调用Django环境 其他操 ...

  9. Django(17)orm查询操作

    前言 查找是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时候传递不同的参数来实现查询需求.在ORM层面,这些查询条件都 ...

随机推荐

  1. <%@ include file=""%>与<jsp:include page=""/>区别(转)

    http://www.iteye.com/topic/312500/ 我们都知道在jsp中include有两种形式,分别是Include指令:<%@ include file="&qu ...

  2. [译]Javascript中的函数

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  3. [译]Javascript数列的push和pop方法

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  4. 英文操作系统中中文乱码(SQL中 NVARCHAR 和 VARCHAR区别)

        varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英 ...

  5. Windows Services windows服务如何删除服务

    如何删除服务 一.为何要删除服务: 1.当服务文件丢失时,在服务里还会显示. 2.现在好多都会有服务,你看那个不顺眼就可以把它干掉.前提是不用的软件. 二.使用: 使用sc.exe 这个是window ...

  6. duddo在xml里面出现红叉的解决方法

    原因是没有加入dubbo.xsd window-Preferences-输入xml-xmltacalog....... 配置离线约束:http://code.alibabatech.com/schem ...

  7. Python 中 os.path 模块的运用

    官网文档链接: https://docs.python.org/3/library/os.path.html 概念: 该模块在路径名上实现了一些有用的功能,主要用于文件的属性获取 代码实现: os.p ...

  8. poj1222(枚举or高斯消元解mod2方程组)

    题目链接: http://poj.org/problem?id=1222 题意: 有一个 5 * 6 的初始矩阵, 1 表示一个亮灯泡, 0 表示一个不亮的灯泡. 对 (i, j) 位置进行一次操作则 ...

  9. loj #2023. 「AHOI / HNOI2017」抛硬币

    #2023. 「AHOI / HNOI2017」抛硬币   题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个 ...

  10. Mysql(Linux服务器)root用户密码忘记重置方法

    MySQL是非常常见的开源数据库,使用者众多,若是不小心忘记了安装在服务器的mysql密码,无法登陆,应该如何重置呢?方法很简单,现在和大家分享下.(系统环境:CentOs 6.5  软件:Mysql ...