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.中间件 ...
随机推荐
- 火币网行情获取的websocket客户端
从验证结果看应该是网络关闭了,不过程序写的不错,可以作为其它websocket客户端的测试程序 # !/usr/bin/env python # -*- coding: utf-8 -*- # aut ...
- Android利用Mediapalyer播放本地资源文件声音
首先在res下创建raw,然后将mp3音乐拷贝到raw下 直接贴代码吧 //开始播放声音 public class PlayVoice { private static MediaPlayer med ...
- java,php,js;AES 互通加解密
1,Java端(依赖 common-codec jar) package com.jiaMi; import javax.crypto.Cipher; import javax.crypto.sp ...
- Java & PHP & Javascript 通用 RSA 加密 解密 (长字符串)
系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...
- Rafy环境配置
如果现在项目已经创建好啦,要使用Rafy框架进行存储,这里我简单的总结下配置的环境步骤: 一.添加引用Rafy的SDK,如下几个; 二.新建文件夹Entities 在此文件夹下创建rafy实体以及仓库 ...
- cocos2dx添加新的类后出现错误undefined reference to的解决办法
使用cocos compile -p android编译cocos2dx项目的时候出现如下错误(新建了TestScene.h,TestScene.cpp): jni/../../Classes/App ...
- ES6 扩展运算符 三点(...)
含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[, , ]) // 1 2 3 conso ...
- windows 驱动开发 MDL 内核层 用户层共享内存
参考资料 https://blog.csdn.net/wdykanq/article/details/7752909 http://blog.51cto.com/laokaddk/404584 内核层 ...
- 【thinkphp5.1】 endroid/qrcode 二维码生成
composer 链接: https://packagist.org/packages/endroid/qrcode 注意:PHP版本 要求 7.1+ 1. 使用 composer 安装 endroi ...
- golang 多个worker正常关闭的示例
代码如下,如有问题请联系 baibaibai_000@163.com package work_test import ( "math/rand" "runtime&qu ...