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. [LeetCode] 367. Valid Perfect Square 检验完全平方数

    Given a positive integer num, write a function which returns True if num is a perfect square else Fa ...

  2. 【搜索】L国的战斗之伞兵

    伞兵?SB?嘿嘿嘿 原题传送门 思路 这道题需要采用倒退的思想. 如果a[x][y]无风或可吹至无风区: 那么它南面如果是北风区,则北风区就也是无风或可吹至无风区(实际上就是可吹至无风区). 那么它北 ...

  3. API加密框架原理解密

    关于框架的使用文章请参考: 前后端API交互如何保证数据安全性?:http://cxytiandi.com/blog/detail/20235 API数据加密框架monkey-api-encrypt: ...

  4. gcc编译的时候报错 error trying to exec 'cc1plus': execvp 解决方法

    sudo apt install --reinstall build-essential -y

  5. 第24课 std::thread线程类及传参问题

    一. std::thread类 (一)thread类摘要及分析 class thread { // class for observing and managing threads public: c ...

  6. (五)golang--常用的一些玩意

    \t--制表位 \n--换行符 \\--一个\ \"--一个” \r--回车 行注释://,一次性注释多行指令,选中代码后ctrl+/ 块注释:/* */ 代码规范: (1)官方推荐使用行注 ...

  7. C++ 类中的3种访问权限和继承方式

    访问权限:public 可以被任意实体访问,protected 只允许子类(无论什么继承方式)及本类的成员函数访问,private 只允许本类的成员函数访问.三种继承方式分别是 public 继承,p ...

  8. python 爬取媒体文件(无防火墙)

    #coding = utf-8 import requests import pandas as pd import os,time root_path = './根目录/' input_file = ...

  9. SpringBoot第十三篇:日志处理

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10973583.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   日志是软件 ...

  10. linux开启tcp_timestamps和tcp_tw_recycle引发的问题研究

    环境:centos7.4 内核版本3.10 最近看内核参数tcp_tw_recycle(该参数在内核 4.12 之后被移除),它用于快速回收处理TIME_WAIT状态的socket.搜索该参数相关的资 ...