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.中间件 ...
随机推荐
- 【转】WPF Template模版之DataTemplate与ControlTemplate的关系和应用(二)
1. DataTemplate和ControlTemplate的关系 学习过DataTemplate和ControlTemplate,你应该已经体会到,控件只是数据的行为和载体,是个抽象的概念,至于它 ...
- TensorFlow at Google I/O 2018
2018 google I/O 上关于TF新功能以及TF技术生态方面的一些总结,更具体的内容可以去看2018 tfdev summit,这里面的内容会更加详细丰富.总的来说TensorFlow在庞大的 ...
- 搜素表脚本.vbs
Set oFso = CreateObject("Scripting.FileSystemObject")dim path(30)dim name(30)'说明书表头有15列:补丁 ...
- Java编码常见的Log日志打印问题
前言 本文总结了作者在Java代码检视中遇到的一些关于日志打印的问题,并给出修改建议.因能力有限,难免存在错漏,欢迎指正. 一. 不规范的异常打印 使用slf4j日志组件时,logger.error( ...
- ALINX公众号
请大家加一下ALINX公众号,后续FPGA资料更新,活动信息,新产品发布将通过微信公众号进行第一时间通知.
- Windows下使用VS2017搭建FLTK开发环境
环境介绍 系统:win10 64位 IDE:VS 2017 Community FLTK版本:1.3.4-2 下载FLTK 截止到本文编写,FLTK的最新稳定版本是1.3.4-2.我们从官网(www. ...
- pandas replace 替换功能function
list like replace method dict like replace method regex expression import pandas as pd import numpy ...
- 2017-2018 ACM-ICPC Latin American Regional Programming Contest GYM101889
挺有意思的一套题,题也没有啥毒瘤了,本来是队切的结果种种原因大家全挂机了. 只补了百人题,一共7个,其他的暂时先不补了,,也不会嘛qwq H:签到 #include <bits/stdc++.h ...
- react使用BrowserRouter打包后,刷新页面出现404
文档 https://gkedge.gitbooks.io/react-router-in-the-real/content/apache.html nginx nginx.conf server { ...
- 网站美化:CSS3自定义修改浏览器滚动条
滚动条组件 ::-webkit-scrollbar //滚动条整体部分 ::-webkit-scrollbar-thumb //滚动条里面的小方块,能向上向下移动(或往左往右移动,取决于是垂直滚动条还 ...