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. numpy:dot与multiply

    http://blog.csdn.net/iamzhangzhuping/article/details/52370241

  2. centos7查看yum安装的软件及路径

    rpm -qa 查看所有已安装软件名称 rpm -ql 软件名 显示软件的安装路径

  3. 如何使用PowerShell批量删除Office 365的用户

    概述 本文将演示如何在必要的时候(例如在测试环境),通过PowerShell脚本批量删除Office 365的用户,首先需要通过Get-MsolUser的命令(并且配合筛选条件)获取到符合条件的用户列 ...

  4. js变量前的+是什么意思

    js变量前的+是什么意思   if (+value >= distance) {} 这个+什么意思 可以理解为 Number(value) 会将其按照Number函数的规则转换为数值或者NaN, ...

  5. Axure实现多用户注册验证

    *****多用户登录验证***** 一.(常规想法)方法:工作量较大,做起来繁琐 1.当用户名和密码相同时怎么区分两者,使用冒号和括号来区分: eg. (admin:123456)(123456:de ...

  6. 剑指offer之二叉树

    二叉树前序,中序,后序遍历思想 前序遍历:ABDCEFGH 中序遍历:BDAFEHGC 后序遍历:DBFHGECA 科普 队列(queue)是一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结 ...

  7. JavaScript 高级程序设计第二版

    20.4 部署 20.4.1 构建 构建过程始于在源控制中定义用于存储文件的逻辑结构.最好避免使用一个文件存放所有的JavaScript,遵循以下面向对象语言中的典型模式:将每个对象或自定义了类别分别 ...

  8. Django认证系统auth认证

    使用Django认证系统auth认证 auth认证系统可以处理范围非常广泛的任务,且具有一套细致的密码和权限实现.对于需要与默认配置不同需求的项目,Django支持扩展和自定义认证;会将用户信息写入到 ...

  9. 【第一部分】07Leetcode刷题

    二.寻找旋转排序数组中的最小值 题目:153. Find Minimum in Rotated Sorted Array C++ Soution 1: class Solution { public: ...

  10. SSD垃圾回收

    A complete GC typically:includes four steps: selecting some blocks that contain somestale data as vi ...