1.

创建模型

一对多:

需要在""多""的表创建一个""关键字段"" 关联  就像在mysql的哪项少的比如(书与出版社之间在书之间创建一个关联字段public_id 对应着出版社的主键)

语法:在""多的"" 那边添加

     # 与Publish建立一对多的关系,外键字段建立在多的一方
publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE)
#publish意味着publish_id 关联字段,无需添加id jdango自动添加
#,on_delete=models.CASCADE 级联删除
#to="Publish" 指向 少 的

一对多

多对多

在mysql中需要创建 一个共同的表,但是在django无需这样

注意:

 authors=models.ManyToManyField(to="Author")
#这里注意 ManyToManyField在django生成的是一个表(记住了)
book_author 表里面含有book_id author_id
这里无需加级联删除,因为只有一个

多对多

一对一

同一对多,唯一区别是 ""关联字段"" 是惟一的 unique

 ad=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
这里OneToOneField 在django默认省略 unique 生成字段

一对一

创建

查询

 # 跨表查询,基于对象
from app01.models import Book,Publish,Author,AuthorDetail
# def books(request):
# 一对多添加
# 方式一 找出存储的出版社地址为条件,找到对象 然后将publish=找到的对象
# pub_obj=Publish.objects.filter(name="云南出版社").first()
# Book.objects.create(title="python",price="100",pub_date="2018-10-17",publish=pub_obj)
# 方式二 在对象里添加publish_id=对应的主键
# Book.objects.create(title="linux", price="100", pub_date="2018-10-17", publish_id=1)
# return HttpResponse("OK")
# 多对多添加
# 方式一 找到要把做作者加入书籍的书籍对象,然后在找到对应作者的主键(也就是找model对象),因为authors也是属性,
# 通过 book.authors.add把作者加入
# book=Book.objects.filter(title="css").first()
# alex=Author.objects.filter(name="alex").first()
# egon=Author.objects.filter(name="egon").first()
# 方式二 找到要把做作者加入书籍的书籍对象,然后通过book.authors.add() 加入对应的作者的主键数字
# book.authors.add(1,2)
# 方式三 当你取到的是一串列表的时候,需要一个个去,这里可以应用打散
# book.authors.add(*[1, 2]) ############查询
# 一对多
# 查询主键为1的书籍的出版社所在的城市
# 正向查询 找到主键为一的对象 再通过对象的属性publish 找出
# book_obj=Book.objects.filter(nid=1).first()
# book_obj是主键为1的书籍对象关联的出版社对象
# print(book_obj.publish.email)
# 找到云南出版社出版的书
# 反向查询
# publish_obj=Publish.objects.filter(name="云南出版社")
# print(publish_obj.book_set.all()) # 多对多
# 正向查询
# book=Book.objects.filter(title="python").first()
# ret=book.authors.all().values("age")
# print(ret)
# 反向查询
# alex=Author.objects.filter(name="alex").first()
# print(alex.book_set.all()) # 一对一 找对象 没有反向
# alex=Author.objects.filter(name="egon").first()
# print(alex.ad.addr) # ad=AuthorDetail.objects.filter(tel=123).first()
# print(ad.author.name) #
# return HttpResponse("OK")

创建,查询

django bms的更多相关文章

  1. Pyhon之Django中的Form组件

    Pyhon之Django中的Form组件   新手上路 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面 ...

  2. Django ORM那些相关操作

    一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/         官网文档 常用的操作 <1> all() ...

  3. Django Admin管理入门

    Django最强大的部分之一是自动管理界面.它从模型中读取元数据,以提供快速,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容.管理员的推荐用途仅限于组织的内部管理工具.它不是用于构建整个 ...

  4. Django的ORM那些相关操作

    一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 & ...

  5. Django之Orm的各种操作

    1.一般操作 ***必知必会13条*** <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 models.Cu ...

  6. Django学习笔记(7)——单表操作和多表操作

    单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...

  7. Django REST framework框架介绍和基本使用

    Django REST framework介绍 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官 ...

  8. web框架开发-Django模型层(1)之ORM简介和单表操作

    ORM简介 不需要使用pymysql的硬编码方式,在py文件中写sql语句,提供更简便,更上层的接口,数据迁移方便(有转换的引擎,方便迁移到不同的数据库平台)…(很多优点),缺点,因为多了转换环节,效 ...

  9. django - 总结

    0.html-socket import socket def handle_request(client): request_data = client.recv(1024) print(" ...

随机推荐

  1. CF1188C Array Beauty(DP)

    日常降智. 不过还是第一次和 2700 的题正解这么近呢-- 由于排序后不影响答案,而且直觉告诉我们排序后会更好做,不妨排个序. 直觉告诉我们,变成求最小差 \(\ge v\) 的方案数会比最小差 \ ...

  2. vue中子组件的methods中获取到props中的值

    这个官网很清楚,也很简单,父组件中使用v-bind绑定传送,子组件使用props接收即可 例如: 父组件中 <template> <div> <head-top>& ...

  3. 2019年上-C语言程序设计-第1次blog作业

    准备工作(20分) 1.在博客园申请个人博客,以真实姓名和学号加入班级博客(链接地址) 2.关注邹欣老师博客(并寻找答案:邹欣老师是谁?是做什么的?).关注任课老师博客 3.注册登录中国大学MOOC网 ...

  4. wifi串口服务器

    下面与大家分享上海卓岚无线wifi串口服务器ZLAN7104创建虚拟串口的设置使用心得 一.7104网线连接计算机,用ZLVircom即可搜索并配置 其中,串口设置需要匹配实际所接的串口设备,配置为相 ...

  5. nginx location笔记

    nginx location笔记= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因此请求为/static/20%/aa,可以被规则 ...

  6. MYSQL LIMIT 性能测试

    查询语句 # 普通表 SELECT * FROM test_page LIMIT m,n # 内存表 SELECT * FROM test_page_memory LIMIT m,n 总结 查询位置( ...

  7. Neo4j 第八篇:投射和过滤

    投射子句用于定义如何返回数据集,并可以对返回的表达式设置别名,而过滤子句用于对查询的结果集按照条件进行过滤 一,Return子句 使用return子句返回节点,关系和关系. 1,返回节点 MATCH ...

  8. Postman安装使用

    下载链接:https://www.getpostman.com/downloads/ 选择下载的版本 postman基础功能介绍 collection在postman里面相当于一个文件夹,可以把同一个 ...

  9. MD5加密方法HashPasswordForStoringInConfigFile(string,string)过时问题处理方法

    最近写代码的时候一直有一种很奇怪的感觉,查了一下发现原来是系统中的MD5加密方法报了过时的警告,虽然对系统没有任何影响,但是开发过程中绿色波浪线就像挥之不去的阴影一样.开发人员多多少少都会有点强迫症, ...

  10. 剑指Offer_栈的压入序列是否有对应的弹出序列

    题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序. 如:假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是 ...