django_4数据库2——表外键
表关系:
- many to one
- many to many
- one to one
many to one
记录是如何创建出来的? 先创建one,在在创建many,创建时加入ForeignKey
from django.db import models # Create your models here.
class Enter(models):
name = models.CharField(max_length=) def __str__(self):
return self.name __repr__ = __str__ class Blog(models):
name = models.CharField(max_length=)
entry = models.ForeignKey(Enter) #参数为one项的类名 def __str__(self):
return self.name __repr__ = __str__
使用交互进行检索
In []: from blog.models import Entry, Blog In []: entry1 = Entry.objects.create(name='alen') #创建对应的one项(Entry) In []: entry2 = Entry.objects.create(name='max') In []: entry3 = Entry.objects.create(name='carl') In []: blog1 = Blog.objects.create(name='alen_blog1', entry=entry1) #创建对应many项 In []: blog1.entry #(many)从many端进行检索到one
Out[]: alen In []: blog1.entry_id
Out[]: In []: entry1.blog_set #(one)它所对应的blog(many)都有哪些
Out[]: <django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager at 0x7f438ce2db00> In []: entry1.blog_set.all()
Out[]: <QuerySet [alen_blog1]>
如何把这这种对应的结果关系如何在web界面实现?
many to many
class Author(models.Model):
name = models.CharField(max_length=30) def __str__(self):
return self.name class Book(models.Model): #一个作者可以有多本书,一本书可以有多个作者
name = models.CharField(max_length=30)
author = models.ManyToManyField(Author)
def __str__(self):
return self.name
同步表,数据库中:
show tables;
| blog_book |
| blog_book_author |自动创建的两个表的关系表
| blog_user |
对数据进行管理
[root@centos7 csvt04]# python3 manage.py shell
In [2]: from blog.models import Author, Book In [3]: Author.objects.create(name='Alen')
Out[3]: <Author: Alen> In [4]: Author.objects.create(name='Ben')
Out[4]: <Author: Ben> In [5]: Author.objects.create(name='Carl')
Out[5]: <Author: Carl> In [6]: Author.objects.create(name='Dev')
Out[6]: <Author: Dev> In [7]: author = Author.objects.all() In [8]: author
Out[8]: <QuerySet [<Author: Alen>, <Author: Ben>, <Author: Carl>, <Author: Dev>]> In [9]: b1 = Book() In [10]: b1.name = 'python book1' In [11]: b1.save() In [12]: alen = Author.objects.get(name='Alen') In [13]: alen
Out[13]: <Author: Alen> In [14]: b1.author.add(alen) In [16]: b1.author.add(author[1]) In [17]: b1.author.all()
Out[17]: <QuerySet [<Author: Alen>, <Author: Ben>]> In [18]: b1.author.add(author[2]) In [19]: b1.author.remove(alen) In [20]: b1.author.all()
Out[20]: <QuerySet [<Author: Ben>, <Author: Carl>]> In [21]: b1.author.filter(name='Carl')
Out[21]: <QuerySet [<Author: Carl>]> In [22]: b1.author.filter(name='Dev')
Out[22]: <QuerySet []> In [23]: alen
Out[23]: <Author: Alen> In [24]: alen.book_set.all()
Out[24]: <QuerySet []>
In [26]: alen.book_set.add(b1) In [27]: alen.book_set.all()
Out[27]: <QuerySet [<Book: python book1>]> In [28]: alen.book_set.create(name='python boo2')
Out[28]: <Book: python boo2> In [29]: alen.book_set.all()
Out[29]: <QuerySet [<Book: python book1>, <Book: python boo2>]> In [30]: Book.objects.all()
Out[30]: <QuerySet [<Book: python book1>, <Book: python boo2>]>
django_4数据库2——表外键的更多相关文章
- sql查询指定表外键约束
//////////////////查询指定表外键约束select a.name as 约束名, object_name(b.parent_object_id) as 外键表, d.name as 外 ...
- Oracle系统表外键的更名
正在看的ORACLE教程是:Oracle系统表外键的更名. Oracle中表的外键是保证系统参照完整性的手段,而参照完整性是指分布在两个表中的列所满足的具有主从性质的约束关系.外键涉及到两个表,其中一 ...
- mysql数据库中表的外键约束
一.外键约束 1.什么是外键? 外键指的是其他表中的主键,当做该表的外键. 2.创建外键. 2.1 可在创建表的时候直接创建外键,如图所示: create table table_name (字段名 ...
- SQL语句添加表外键
ALTER TABLE 表名 ADD CONSTRAINT FK_ID FOREIGN KEY(外键列) REFERENCES 外键表(外键表主键)
- rest framework 序列化之depth遇到用户表外键的尴尬情况
rest framework 序列化之depth遇到用户表外键的尴尬情况 问题:ModelSerializer序列化使用depth=1直接扩表把用户表所有信息查询出来的情况 class xxxSeri ...
- MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别
DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...
- sql 删除数据库表 外键
--/第1步**********删除所有表的外键约束*************************/ DECLARE c1 cursor for select 'alter table ['+ ...
- DROP TABLE ** CASCADE CONSTRAINTS PURGE删除表的时候级联删除从表外键
1.关于 cascade constraints 假设A为主表(既含有某一主键的表),B为从表(即引用了A的主键作为外键). 则当删除A表时,如不特殊说明,则 drop table A 系统会出现错误 ...
- 2017年10月22日 基础SQL语句&数据库创建主外键关系
1.SQL语句的注释 双减号:-- 或者/**/2.创建数据库create database 数据库名称(不允许以数字开头,不允许以符号开头,不要起汉语名字) 3.如何选中这个数据库use 数据库名 ...
随机推荐
- python字符的各种处理,不用内置函数总结
一.字符的逆序,可变字符长度的最大值,自然数列表相加 # e=input("输入自然数字字符串:") # result=0 # for x in e: # result+=eval ...
- 玩转ArduinoJson库 V6版本
1.前言 前面,博主已经讲解了ArduinoJson库的V5版本.为了节省时间以及不讨论重复内容,博主建议读者先去阅读一下 玩转ArduinoJson库 V5版本 .重点了解几个东西: JSO ...
- LeetCode122——Best Time to Buy and Sell Stock II
题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...
- spring boot 日志收集整理
spring boot 日志 1. 选择那种日志框架 slf4j 是抽像的接口层.也是spring boot 默认采用的接口层. util.logging,log4j,logback,commons- ...
- redis入门(一)
目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...
- 设计模式C++描述----18.中介者(Mediator)模式
一. 举例 比如,现在中图和日本在关于钓鱼岛问题上存在争端.这时,联合国就会站出来,做为调解者,其实也没什么好调解的,钓鱼岛本来就是中国的,这是不争的事实!联合国也就是个传话者.发言人. 结构图如下: ...
- 【EmguCV视频教程】VS2017+EmguCV3.4(C# OpenCV)高清入门视频教程
视频采用VS2017 + EmguCV3.4版本录制,内容类似本人的Python和C++版本,如果需要的朋友可加我咨询,视频共40讲,从按照到读取显示图片,图形预处理,边缘检测,形态学,角点检测,轮廓 ...
- 在VMware下进行的CentOS7操作系统虚拟机的安装
一.VMware虚拟机的安装 首先你需要拥有一款软件VMware,这是一款虚拟机安装软件.Vmware比起Vbox收费较贵,占用资源大,但是拥有大量的资源以及拥有克隆技术,适合新手学习使用,较为专业. ...
- OPTIONS 请求引发的分析
阅读提纲: 为什么会出现 OPTIONS 请求? 什么情况下会出现 OPTIONS 请求? OPTIONS 请求会发送什么内容? 跨域前端访问后端时,所有的 Ajax HTTP 请求都会先发送一个 O ...
- CSPS_106
这场 死的太惨了! 我也不把我的错误像倒垃圾一样放在blog里了qwq 通过这场考试 我深深地认识到了情绪对人类的影响qwq 只要这种东西,不要出现在我的csp中就好了 T1 区间DP.. T2 枚举 ...