Django之Models(二)
Django之Models(二)
创建一对多的关系
一个出版商可以有多本出版的书
一本书只有一个出版商
创建一对多的语法:
字段名= models.ForeignKey(关联表(类名),on_delete=[选项])
注意:这里外键字段名不要在加上id,默认会加上。
我在这里加上了ID,会变成publisherID_id。
from django.db import models # Create your models here. class Publisher(models.Model):
name = models.CharField(max_length=30)
city = models.CharField('城市',max_length=60) class Book(models.Model):
name=models.CharField(max_length=20)
price=models.IntegerField()
pub_date=models.DateField()
author=models.CharField(max_length=32,null=False)
publisherID= models.ForeignKey(Publisher,on_delete=models.SET)
报错:TypeError: __init__() missing 1 required positional argument: 'on_delete'
注意:一定要加上on_delete参数
on_delete参数的各个值的含义: on_delete=None, # 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE,
# 删除关联数据,与之关联也删除
on_delete=models.DO_NOTHING,
# 删除关联数据,什么也不做
on_delete=models.PROTECT,
# 删除关联数据,引发错误ProtectedError
# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL,
# 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
on_delete=models.SET_DEFAULT,
# 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
on_delete=models.SET,
# 删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
增加数据
方式一:
#publisherID_id=2:通过赋值的办法
Book.objects.create(name="linux运维",price=77,pub_date="2019-02-10",author="",publisherID_id=2) 方式二:
#publisherID=publish_obj:通过赋值对象的办法
publish_obj=Publish.objects.filter(name="人民出版社")[0] #这里filter返回是一个集合对象,使用需要[]取出来用
Book.objects.create(name="linux运维",price=77,pub_date="2019-02-10",author="",publisherID=publish_obj)
查询数据
正向查询
# book_obj=Book.objects.get(name="python")
# print(book_obj.name)
print(book_obj.price)
print(book_obj.pub_date)
print(book_obj.author)
# 如何拿到与它绑定的Publisher对象呢?
# 一对多:这里外键publisherID一定是一个对象
# print(book_obj.publisherID.name)
# print(book_obj.publisherID.city)
反向查询
pub_obj=Publisher.objects.filter(name="人民出版社")[0]
print(pub_obj.name)
print(pub_obj.city)
#pub_obj.book_set是一个queryset集合
#如何拿到与它绑定的Book对象呢?
print(pub_obj.book_set.all().values('name','price'))
(filter valuse 双下划线)
#正向查询:通过外键__字段
python的出版商
ret1 =Book.objects.filter(name="python").values("publisherID__name"))
#反向查询:通过表名__字段 python的出版商
ret1 = Publisher.objects.filter(book__name='python').values('name')
Django之Models(二)的更多相关文章
- Django的Models(二)映射关系
关系分为三种: 一对一 :user2 = models.OneToOneField("UserInfo") 一对多:user = models.ForeignKey("U ...
- Django开发之路 二(django的models表查询)
django的models表查询 一.单表查询 (1) all(): 查询所有结果 # 返回的QuerySet类型 (2) filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 #返 ...
- python 学习笔记十七 django深入学习二 form,models
表单 GET 和 POST 处理表单时候只会用到GET 和 POST 方法. Django 的登录表单使用POST 方法,在这个方法中浏览器组合表单数据.对它们进行编码以用于传输.将它们发送到服务器然 ...
- 【Django】--Models 和ORM以及admin配置
Models 数据库的配置 1 django默认支持sqlite,mysql, oracle,postgresql数据库 <1>sqlite django默认使用sqlite的数据库 ...
- Django的Form(二)
上一篇已经简单介绍了Django的Form,现在开始进阶操作了 ..... 创建Form类的时候,主要涉及到Form字段和Form的插件,字段用于做form验证,插件用来生成HTML DjiangoF ...
- Django的models实现分析
1 引子 1.1 神奇的Django中的models 我们先来看一段在Django项目中常用的代码: 设置数据库models代码: class Students(models.Mod ...
- django 模型models
1. django 模型models 常用字段 1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列 如果要显式的自定义一 ...
- Django学习笔记二
Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...
- Django知识总结(二)
拾 ● 模型(M) 一 ● ORM(对象关系映射, Object Relational Mapping) 类----一张表 类的实例对象----表中的一条记录 映射关系 ①python的类名对应的SQ ...
随机推荐
- Confluence 6 升级自定义的站点和空间仔细测试你的修改
修改可能对 Confluence 的后续版本不兼容,当你对 Confluence 进行升级的时候,你应该总是对你自定义修改的模板文件进行仔细的测试来确定所有的修改对新版本的 Confluence 兼容 ...
- ionic3 打包报错[ERROR] An error occurred while running cordova prepare (exit code 1):
解决办法:删除并重新添加平台以使用以下命令解决问题: cordova platform rm ios cordova platform add ios 如果执行 ionic cordova build ...
- Linux 系统根目录下各个文件夹的作用
原文: https://blog.csdn.net/qq_26941173/article/details/78376760 /bin 系统由很多放置可执行文件的目录,但是bin目录比较特殊.因为bi ...
- 在 Python 中使用 JSON
在 Python 中使用 JSON 本教程将会教我们如何使用 Python 编程语言编码和解码 JSON.让我们先来准备环境以便针对 JSON 进行 Python 编程. 环境 在我们使用 Pytho ...
- WPF应用程序内存泄漏的一些原因
原文:Finding Memory Leaks in WPF-based applications There are numbers of blogs that folks wrote about ...
- 学习笔记: 特性Attribute详解,应用封装
/// /// 特性:中括号声明 /// /// 错觉:每一个特性都可以带来对应的功能 /// /// 实际上特性添加后,编译会在元素内部产生IL,但是我们是没办法直接使用的, /// 而且在meta ...
- [转] Node.js使用MongoDB3.4+Access control is not enabled for the database解决方案
今天使用MongoDB时遇到了一些问题 建立数据库连接时出现了warnings 出现这个警告的原因是新版本的MongDB为了让我们创建一个安全的数据库 必须要进行验证 后来在外网找到了答案 解决方案如 ...
- (5).NET CORE微服务 Micro-Service ---- 熔断降级(Polly)
一. 什么是熔断降级 熔断就是“保险丝”.当出现某些状况时,切断服务,从而防止应用程序不断地尝试执行可能会失败的操作给系统造成“雪崩”,或者大量的超时等待导致系统卡死. 降级的目的是当某个服务提供者发 ...
- tjoi2018
1.[TJOI2018]数学计算 傻逼题 会发现符合线段树分治的特点 每个数的操作范围都是连续的 然后就等于区间修改了 #include <bits/stdc++.h> using nam ...
- bzoj2683&&bzoj4066
题解: 前一题不是强制在线,后一题是强制在线 树套树空间会炸 说一下cdq分治+树状数组 首先我们利用cdq分治使得查询和操作保证先后关系 然后矩阵查询变成4个矩阵的差 那么我们就可以运用扫描线的方法 ...

