model.py

from django.db import models

# Create your models here.

class Book(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=64)
publishDate = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2) publish = models.ForeignKey(to="Publish", to_field="nid", on_delete=models.CASCADE) authors = models.ManyToManyField(to="Author") class Author(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField()
# 作者和作者信息一对一
AuthorDetail=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE) class AuthorDetail(models.Model):
nid = models.AutoField(primary_key=True)
# birthday = models.DateField() 如果报错 Python int too large to convert to C long 则注销这行
tetephone = models.BigIntegerField()
addr = models.CharField(max_length=64) class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)
email = models.EmailField()

views.py

from django.shortcuts import render

# Create your views here.
from django.shortcuts import HttpResponse, redirect, render
from .models import Book, Author, AuthorDetail, Publish def index(request): ''' 一(出版社)对多(书籍) 查询 ''' # 1、(正向查询按字段) 查询主键为1的书籍的出版社所在的城市
book_obj=Book.objects.get(pk=1)
print(book_obj.publish.city) # 2、(反向查询)查询 苹果出版社 出版的所有书籍的名字(反向查询按表名小写)
# “要查询的表_set” 就是反向查询所要查询的关联表数据
publish_obj=Publish.objects.get(name="苹果出版社")
print(publish_obj.city)
book_list=publish_obj.book_set.all()
print(book_list)
for item in book_list:
print(item.title) ''' 一(作者)对一(作者详情)查询 '''
# 1、反向查询 查询所有住址在北京的作者的姓名(通过authordetail去查询author表)
author_detail_list=AuthorDetail.objects.filter(addr="北京").all()
print(author_detail_list)
for item in author_detail_list:
print(item.author.name) # 2、正向查询 查询作者为tom的地址在哪里?
author_obj=Author.objects.get(name="tom")
print(author_obj) # Author object (1)
print(author_obj.AuthorDetail) # AuthorDetail object (1)
print(author_obj.AuthorDetail.addr) # 北京 '''多(Author)对多(Book)查询'''
# 正向查询
# 1、追风筝的人 所有作者的名字以及手机号
book_obj=Book.objects.get(title="追风筝的人")
print(book_obj) # Book object (3)
author_list=book_obj.authors.all()
print(author_list) # <QuerySet [<Author: Author object (1)>, <Author: Author object (2)>]>
for author_obj in author_list:
print(author_obj) # Author object
print(author_obj.name)
print(author_obj.AuthorDetail.addr) # 再跨一张authordetail表 # 2、反向查询 查询tom出过的所有书籍的名字
author_obj=Author.objects.get(name="tom")
print(author_obj) # Author object (1)
book_list=author_obj.book_set.all()
print(book_list) # <QuerySet [<Book: Book object (3)>, <Book: Book object (1)>]>
for book_obj in book_list:
print(book_obj.title) return HttpResponse("ok")

基于对象的orm跨表查询再练习的更多相关文章

  1. 第十七篇 ORM跨表查询和分组查询---二次剖析

    ORM跨表查询和分组查询---二次剖析 阅读目录(Content) 创建表(建立模型) 基于对象的跨表查询 一对多查询(Publish与Book) 多对多查询 (Author 与 Book) 一对一查 ...

  2. 六、Django学习之基于下划线的跨表查询

    六.Django学习之基于下划线的跨表查询 一对一 正向查询的例子为 已知用户名,查询用户的电话号码.反向查询例子反之. 正向查询 其中下划线前的表示表名,无下划线的表示的是Author表 resul ...

  3. Django框架第七篇(模型层)--多表操作:一对多/多对多增删改,跨表查询(基于对象、基于双下划线跨表查询),聚合查询,分组查询,F查询与Q查询

    一.多表操作 一对多字段的增删改(book表和publish表是一对多关系,publish_id字段) 增  create publish_id 传数字   (publish_id是数据库显示的字段名 ...

  4. ORM跨表查询总结

    一.基于对象的查询-->子查询 1.一对多 正向查询:基于 字段 反向查询:基于 表名__set.all() 注意:表名全部小写 2.多对多 正向查询:基于 字段.all() 反向查询:基于 表 ...

  5. ORM跨表查询问题

    环境准备: 表结构 from django.db import models # Create your models here. class Publisher(models.Model): id ...

  6. django orm跨表查询废话最少最精简版

    在model.py中: class B1(models.Model): u1= models.CharField(max_length=32) #多 class B2(models.Model): f ...

  7. $Django 多对多-自定义第三张表 基于双下划线的跨表查询(补充)

    自定义第三张表的好处:可以定义多个字段, 缺点:查询不方便(有方法解决) 1.第三张表设置外键,联合唯一(查询不方便) class Books(models.Model): name=models.C ...

  8. django(3) 一对多跨表查询、ajax、多对多

    1.一对多跨表查询获取数据的三种形式:对象.字典.元组 例:有host与business两张表,host与business的id字段关联,business在host表中的对象名是b,  通过查询hos ...

  9. django之 使用views.py里面的函数对表进行增删改查 内容(models.py中表的创建、views.py中函数的使用,基于对象的跨表查询)

    models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True),  OneToOneField("Author" ...

随机推荐

  1. 基于DIGI WR21的PLC数据采集

    通过路由器,使用python脚本读取数据,转发到后台golang数据采集平台,数据采集平台通过数据清洗,然后把数据清洗成标准数据,通过gRpc传输到分析平台.后期会写一点golang 基于grpc的微 ...

  2. 2019.10.28sql注入工具

    SQLMAP工具的使用 sql注入工具:明小子 啊D 萝卜头 穿山甲 sqlmap等等 开源自动化注入利用工具,支持12中数据库,在/plugins中可以看到支持的数据库种类 支持的注入类型:bool ...

  3. 自学Python5.5-面向对象三大基本特征_继承

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  4. 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)

    链接:https://ac.nowcoder.com/acm/contest/894/C 来源:牛客网 华华跟奕奕玩游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  5. Codeforces 999

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std ...

  6. tomcat9.0 问题汇总

    安装时提示 Failed installing tomcat9 service 是因为之前安装tomcat,然后直接删除文件夹,虽然把文件夹删除了,但是重新安装时,服务存在相同的服务名,解决办法:使用 ...

  7. IDEA+SpringBoot+Freemark 构造一个简单的页面

    访问地址 http://localhost:8083/m2detail 1.在Controller中配置 /** * m2detail */ @RequestMapping(value = " ...

  8. ConfigMap-k8s

    创建方式 创建ConfigMap的方式有4种: 1,通过直接在命令行中指定configmap参数创建,即--from-literal 2,通过指定文件创建,即将一个配置文件创建为一个ConfigMap ...

  9. 在Controller中使用AOP

    转:http://usherlight.iteye.com/blog/1306111 在Controller中使用AOP的问题主要在于如何让Controller能够被检测到. Controller和其 ...

  10. openwrt python27库的选择和库的大小

    < > micropython................................................. Micro Python < > microp ...