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(二)的更多相关文章

  1. Django的Models(二)映射关系

    关系分为三种: 一对一 :user2 = models.OneToOneField("UserInfo") 一对多:user = models.ForeignKey("U ...

  2. Django开发之路 二(django的models表查询)

    django的models表查询 一.单表查询 (1) all(): 查询所有结果 # 返回的QuerySet类型 (2) filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 #返 ...

  3. python 学习笔记十七 django深入学习二 form,models

    表单 GET 和 POST 处理表单时候只会用到GET 和 POST 方法. Django 的登录表单使用POST 方法,在这个方法中浏览器组合表单数据.对它们进行编码以用于传输.将它们发送到服务器然 ...

  4. 【Django】--Models 和ORM以及admin配置

    Models 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库 <1>sqlite django默认使用sqlite的数据库 ...

  5. Django的Form(二)

    上一篇已经简单介绍了Django的Form,现在开始进阶操作了 ..... 创建Form类的时候,主要涉及到Form字段和Form的插件,字段用于做form验证,插件用来生成HTML DjiangoF ...

  6. Django的models实现分析

    1      引子 1.1     神奇的Django中的models 我们先来看一段在Django项目中常用的代码: 设置数据库models代码: class Students(models.Mod ...

  7. django 模型models

    1. django 模型models 常用字段          1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列 如果要显式的自定义一 ...

  8. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  9. Django知识总结(二)

    拾 ● 模型(M) 一 ● ORM(对象关系映射, Object Relational Mapping) 类----一张表 类的实例对象----表中的一条记录 映射关系 ①python的类名对应的SQ ...

随机推荐

  1. 修改Mysql5.7的root密码

    Mysql5.7修改root密码 禁用root密码 1.修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不 ...

  2. nginx官方模块之http_random_index_module

    作用 目录中选择一个随机主页 语法

  3. Nginx详解十一:Nginx场景实践篇之Nginx缓存

    浏览器缓存: HTTP协议定义的缓存机制(如:Expires.Cache-control等) 当浏览器第一次请求的时候,浏览器是没有缓存的 第二次请求开始就有缓存了 校验过期机制 配置语法-expir ...

  4. Python继承、方法重写

    继承 在编写类时,并不是每次都要从空白开始.当要编写的类和另一个已经存在的类之间存在一定的继承关系时,就可以通过继承来达到代码重用的目的,提高开发效率. class one(): "&quo ...

  5. Mysql 查看连接数,状态 最大并发数

    show status like '%max_connections%'; ##mysql最大连接数set global max_connections=1000 ##重新设置show variabl ...

  6. js FileReader 笔记

    以上传图片为例 通过input type='file' 上传完成图片后,获取图片 $('#input').files[0] var reader = new FileReader();    read ...

  7. 论文阅读笔记十:DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs (DeepLabv2)(CVPR2016)

    论文链接:https://arxiv.org/pdf/1606.00915.pdf 摘要 该文主要对基于深度学习的分割任务做了三个贡献,(1)使用空洞卷积来进行上采样来进行密集的预测任务.空洞卷积可以 ...

  8. 爬取文件时,对已经操作过的URL进行过滤

    爬取文件时,对已经操作过的URL进行过滤 1.创建过滤规则文件filter.py在spiders同级目录 class RepeatUrl: def __init__(self): self.visit ...

  9. 小程序报错:request:fail错误(含https解决方案)(真机预览问题)

    问题描述:域名已经备案,我全部都有,也在后台配置了,但是手机预览,还是请求失败, PC端是可以请求数据出来的 新版开发者工具增加了https检查功能:可使用此功能直接本地避开ssl协议版本检查,但是此 ...

  10. 使用python解决算法和数据结构--使用栈实现进制转换

    可以将10进制数据转换成2进制,8进制,16进制等. 晚上练练算法和数据结构哈. # coding = utf-8 class Stack: def __init__(self): self.item ...