》修改模型类

如果对表的需求有变化

需要修改表

直接改模型类

》 当前需求

给一个表添加一个外键,使两张表之间发生关联

图书表,英雄表

图书与英雄的关系

1个图书对应多个英雄

1个英雄对应一个图书

因此,图书与英雄的关系是 1图书对多英雄,属于一对多关系

表格添加外键字段

》外键字段要定义在多方

》外键字段的定义方式

在模型类中定义一个字段

bid = models.ForeignKey("要关联的模型类名称")

当模型类发生变化后

1,生成迁移文件,因为sql语句肯定要重写

2,迁移数据

》迁移时发生报错

》解决办法

原因:在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
举例说明:
user=models.OneToOneField(User)
owner=models.ForeignKey(UserProfile)
需要改成:
user=models.OneToOneField(User,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE)是默认值
owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE)是默认值
参数说明:
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。
一般情况下使用CASCADE就可以了。

》修改表时会弹出提示

对于新增加的字段如何处理

(base) G:\bookHeroPro>python manage.py makemigrations
You are trying to add a non-nullable field 'bid' to hero without a default; we can't do that (the database needs somethingto populate existing rows).
Please select a fix:1) Provide a one-off default now (will be set on all existing rows with a null value for this column)2) Quit, and let me add a default in models.py
Select an option:

选择2,自己给外键字段添加默认值

正向查找与反向查找

》获取一个英雄

In [1]: from bookTest import modelsIn [2]: # 查找一个英雄In [3]: heroLB = models.Hero.objects.get(id=1)In [4]: heroLB
Out[4]: <Hero: Hero object (1)>In [5]: heroLB.id
Out[5]: 1In [6]: heroLB.name
Out[6]: '刘备'In [7]: heroLB.bid_id
Out[7]: 1In [8]: heroLB.bid
Out[8]: <Book: 三国演义>In [9]: heroLB.bid.title
Out[9]: '三国演义'In [10]: heroLB.bid.info
Out[10]: '三国时期的故事'In [11]: 

django-模型类的修改-外键相关推荐

  1. java外键实体类_java – 在Embeddable类中的外键映射

    我正在使用 eclipselink进行JPA.我有一个实体,它有一个由两个字段组成的复合键.以下是我的Embeddable主键类的字段(成员). @Embeddable public class Le ...

  2. Django - 模型序列化返回自然主键值

    场景 在设计表结构时,难免需要建立一些外键关联.例如这样两个模型: from django.db import modelsclass Person(models.Model):username = ...

  3. Django模型类与后台管理

    文章目录 模型类 模型类设计 生成迁移文件 执行迁移生成表 通过模型类操作数据表 后台管理 1.本地化 2.创建管理员 3. 管理员登陆网址 4.注册模型类 5.自定义表单 模型类 模型类设计 在应用 ...

  4. Django模型类操作数据表

    1.创建项目 django-admin startproject my_first_django # 创建一个名称为my_first_django的项目 命令执行后会产生一个项目名称的文件夹和一个ma ...

  5. 第十章:django模型类(二)

    系列文章目录 第一章 :Django安装与配置虚拟环境 第二章:django各模块的作用以及参数说明 第三章:  Django的路由与视图 第四章:django请求 第五章:django会话 第六章: ...

  6. MySql 修改外键 支持级联删除

    首先必须要有外键,InnoDB甚么的都不说了,直接上修改句子. 要先删除该外键,然后添加. 具体原因貌似是因为不支持alter外键的操作. ALTER TABLE `t_terminal` DROP ...

  7. mysql修改外键字段报异常_mysql修改索引时,外键约束造成的奇怪问题_MySQL

    Mysql外键 bitsCN.com mysql修改索引时,外键约束造成的奇怪问题 事情是这样的,在Windows的mysql5.5 ,我想修改一个表的索引,于是执行 [sql] ALTER TABL ...

  8. oracle修改外键值,ORACLE 外键约束修改行为

    Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在.而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作. 在SQL92标准中定义了几种外键改变后,如何处理子表 ...

  9. django 模型类的常见字段约束,以及filter 过滤和查询

    null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...

最新文章

  1. 2021年大数据Spark(九):Spark On Yarn两种模式总结
  2. Clojure 入门
  3. linux shell 编程 12 重定向
  4. 【最详细】数据结构(C语言版 第2版)第七章课后习题答案 严蔚敏 等 编著
  5. how to setup a Kubernetes cluster on GCP
  6. 第8章 数据库的分库分表
  7. 学习C#十五天的总结
  8. 10年经验总结,华为fellow教你如何成为一名优秀的架构师?
  9. 外键查询_详解MySQL数据库删除所有表的外键约束、禁用外键约束相关脚本
  10. Resharper:还记得NHibernate之夏中那如梦般的代码自动工具吗?
  11. java mxml_Java 之 XML
  12. 如何破解瞻博网络认证的互联网专家 - JUNOS安全考试(JNCIS)
  13. 普元mobile_普元Primeton Mobile 7.1 正式发布 互联网集成能力加速企业数字化转型
  14. 【U8】固定资产模块卡片管理栏目设置中没有“凭证号”栏目
  15. Redis介绍与安装
  16. java绘图机器猫_简笔画教程:教你画机器猫
  17. linux 黑屏后死机,如何修复各种各样的黑屏死机
  18. 智能家居 打造一间乐享智能生活的“聪明屋”
  19. PAC(probably approximately correct) 学习架构介绍
  20. Double的compareTo

热门文章

  1. 派单o2o全开源版 v11.6.0 全新UI版 修复短信问题 小程序模块
  2. 微信小程序商城,微信小程序微店,长期维护版本
  3. Softaken Unlock PDF Files v1.0 PDF文件解密
  4. Java | Java语言在Eclipse控制台输入的三种方法
  5. 判断设置两天后时间,时间戳
  6. sublime 插件安装;sublime的 babel、sublime-jsfmt插件
  7. matlab 中 Transform,变换数据存储 - MATLAB transform - MathWorks 中国
  8. matlab调用手机摄像头,MATLAB下使用摄像头
  9. 开源社区团购微商城小程序,直播
  10. 精细篇Java8强大的stream API接口大全(代码优雅之道)