Django框架详细介绍---ORM---图书信息系统专题训练
from django.db import models # Create your models here.
# 书
class Book(models.Model):
title = models.CharField(max_length=32)
publish_date = models.DateField(auto_now_add=True)
price = models.DecimalField(max_digits=5, decimal_places=2)
memo = models.TextField(null=True)
# 创建外键,关联publish
publisher = models.ForeignKey(to="Publisher", on_delete=models.CASCADE, related_name='books')
# 创建多对多关联author
author = models.ManyToManyField(to="Author") def __str__(self):
return self.title # 出版社
class Publisher(models.Model):
name = models.CharField(max_length=32)
city = models.CharField(max_length=32) def __str__(self):
return self.name # 作者
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
phone = models.CharField(max_length=11)
detail = models.OneToOneField(to="AuthorDetail", on_delete=models.CASCADE) def __str__(self):
return self.name # 作者详情
class AuthorDetail(models.Model):
addr = models.CharField(max_length=64)
email = models.EmailField()
表结构:





练习:
import os if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite05.settings") import django
django.setup()
# 在设置好环境变量以及导入Django项目之后才能找到Django项目下的APP
# 所以必须要在这里导入
from app import models # 查找某个出版社关联的所有的书籍---反向查找
# ret = models.Publisher.objects.get(id='2').book_set.all() # 在Book中添加反向操作related_name之后
# ret = models.Publisher.objects.get(id='2').books.all() # 查找书名为七侠五义的出版社的名字
# Book类和Publisher定义的时候调用了__str__方法
# 实例化出类的时候自动打印出相应的名字
# ret = models.Book.objects.get(title='七侠五义').publisher # 查找所有书名里有传奇的书
# ret = models.Book.objects.filter(title__contains='传奇') # 查找出版日期为2017年的书籍
# ret = models.Book.objects.filter(publish_date__year=2017) # 查找出版日期是2018年的书名
# ret = models.Book.objects.filter(publish_date__year=2018).values('title') # 查找价格大于100元的书籍
# ret = models.Book.objects.filter(price__gt=100).values("title", "price") # 查找某字段为空的
# ret = models.Book.objects.filter(memo__isnull=True) # 查找在北京的出版社
# ret = models.Publisher.objects.filter(city='北京') # 查找名字以传奇结尾的书本
# ret = models.Book.objects.filter(title__endswith='传奇').values('title') # 查找作者名字里面带"张"字的作者
# ret = models.Author.objects.filter(name__contains="张") # 查找年龄大于30岁的作者
# ret = models.Author.objects.filter(age__gt=19) # 查找手机号是155开头的作者
# ret = models.Author.objects.filter(phone__startswith='155') # 查找手机号是155开头的作者的姓名和年龄
# ret = models.Author.objects.filter(phone__startswith='155').values('name','age') # 查找书名是"七侠五义"的书的出版社
# 基于对象查找
# ret = models.Book.objects.get(title="七侠五义").publisher # 查找书名是"武林传奇"的书的出版社所在的城市
# ret = models.Book.objects.get(title="武林传奇").publisher.city
# 基于双下滑线的查找方式
# ret = models.Book.objects.filter(title="武林传奇").values("publisher__city") # 查找书名是"武林传奇"的书的出版社的名称
# ret = models.Book.objects.filter(title="武林传奇").values("publisher__name") # 查找书名是"七侠五义"的书的所有作者
# ret = models.Book.objects.filter(title='七侠五义').values('author__name').all() # 查找书名是"武林传奇"的书的作者的年龄
# ret = models.Book.objects.filter(title='七侠五义').values('author__name','author__age').all() # 查找书名是"武林传奇"的书的作者的手机号码
# ret = models.Book.objects.filter(title='武林传奇').values('author__name','author__phone') # 查找书名是"武林传奇"的书的作者的地址
# ret = models.Book.objects.filter(title='武林传奇').values('author__detail__addr') # 查找书名是"武林传奇"的书的作者的邮箱
# ret = models.Book.objects.filter(title='武林传奇').values('author__detail__email') # print(ret)
习题答案
Django框架详细介绍---ORM---图书信息系统专题训练的更多相关文章
- Django框架详细介绍---ORM相关操作---select_related和prefetch_related函数对 QuerySet 查询的优化
Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化 引言 在数据库存在外键的其情况下,使用select_related()和pre ...
- Django框架详细介绍---ORM相关操作
Django ORM相关操作 官方文档: https://docs.djangoproject.com/en/2.0/ref/models/querysets/ 1.必须掌握的十三个方法 <1& ...
- Django框架详细介绍---模型---ORM
一.概述 ORM(Object Relational Mapping),全称:对象关系映射,简单的说就是通过创建类.实例化出对象的方法,使得类.对象.对象的属性能够和数据库中的表.记录.字段意义对应. ...
- Django框架详细介绍---中间件(认证)
一.绪论 在cookie和session的应用中,通过在视图函数内添加装饰器判断用户是否登录,把没有登录的用户请求跳转到登录页面,通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可 ...
- Django框架详细介绍---cookie、session、自定义分页
1.cookie 在HTTP协议介绍中提到,该协议是无状态的,也就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的 ...
- Django框架详细介绍---request对象
几个重要的函数 1.HttpRequest.get_host() 根据从HTTP_X_FORWARDED_HOST(如果打开 USE_X_FORWARDED_HOST,默认为False和 HTTP_H ...
- Django框架详细介绍---视图系统
Django视图系统 1.什么是视图 在Django中,一个视图函数/类,称为视图.实质就是一个用户自定义的简单函数,用来接收WEB请求并xing响应请求,响应的内容可以是一个HTML文件.重定向.一 ...
- Django框架详细介绍---Admin后台管理
1.Admin组件使用 Django内集成了web管理工具,Django在启动过程中会执行setting.py文件,初始化Django内置组件.注册APP.添加环境变量等 # Application ...
- Django框架详细介绍---请求流程
Django请求流程图 1.客户端发送请求 2.wsgiref是Django封装的套接字,它将客户端发送过来的请求(请求头.请求体封装成request) 1)解析请求数据 2)封装响应数据 3.中间件 ...
随机推荐
- ICE的异步方法调用
转自:http://blog.sina.com.cn/s/blog_45497dfa0100nwbr.html http://www.cnblogs.com/mawanglin2008/article ...
- 对世界首款“人工智能”ERP系统HUE的初步了解 - AI ERP - WAP - 万革始
偶然的机会,刚好在查找机器人王国[奇妙的餐厅]的时候,看到开发[光的王国],[奇妙的宾馆],[奇妙的餐厅]等豪斯登堡集团在3月17日采用了这个传说中的世界首款人工智能ERP系统AI WORKS的下面4 ...
- 在windows 上自动重启 tomcat 的方法
在windows 上自动重启 tomcat 的方法 实现思路: Windows 上监控tomcat 进程并且自动重启的脚本 一类是 定时重启 tomcat 一类是 监控并重启 写一个守护tomcat进 ...
- Elasticsearch 学习之子聚集过滤
. 获取子聚合结果总数 { , "aggs": { "msisdnAgg": { "terms": { "field": ...
- java源码中的注解
spring框架源码中充满了注解,如果对注解不是很了解,阅读源码就寸步难行,下面我们来看看annotation.https://blog.csdn.net/briblue/article/detail ...
- python爬虫工具
一直都听说python写爬虫工具非常方便,为了获取数据,我也要写点爬虫,但是python太灵活了,不知道python爬虫要哪些框架,要了解,比如beatiful soup,scrapy, 爬虫的额主要 ...
- PHP计算显示平均温度、五个最低及最高温度
<?php $month_temp = "78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 81, 76, 73, 68, 72, 73, ...
- 七牛 OCR 接口调试 & 七牛鉴权 Token 应用
接口规约 PHP 实现 核心代码 执行结果 源代码 Java 实现 核心代码 执行结果 源代码 [现学现卖]图片内容审核接口 Python 实现 核心代码 执行结果 源代码 Go 实现 核心代码 执行 ...
- css3贝塞尔曲线
http://yisibl.github.io/cubic-bezier/#.17,.67,.94,.53 前言 在了解 cubic-bezier 之前,你需要对 CSS3 中的动画效果有所认识,它是 ...
- allegro画电路板
出图: 选择save all checked导出film_setup.txt: 选择replace导入film_setup.txt: 丝印层选择silkscreen,但是silkscreen和asse ...