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 数据库名 ...
随机推荐
- 查看java内存情况的几个常用命令
java 命令简单查看jvm内存使用状况 jinfo:可以输出并修改运行时的java 进程的opts. jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序, ...
- Mobius反演学习
这篇文章参考了许多资料和自己的理解. 先放理论基础. 最大公约数:小学学过,这里只提一些重要的公式: $·$若$a=b$,则$\gcd(a,b)=a=b$: $·$若$\gcd(a,b)=d$,则$\ ...
- 使用animate.css
今天有个一前辈来看了一下我的小程序啊,说写的还行就是可以不用只按照ui给的图写界面,自己可以添加一些动态的炫酷效果,不用不知道一用吓一跳啊,用之前觉得好好一个界面为什么要搞那些花里胡哨的东西,单纯一点 ...
- Nginx 热部署和日志切割,你学会了吗?
上篇文章,我们已经安装好 Nginx,并且配置好 Nginx 文件后,这个时候我就需要操作 Nginx 的命令行了,这篇文章主要讲解 Nginx 命令行相关知识,并通过日常遇到的热部署.切割日志文件场 ...
- Java多线程编程(一)Java多线程技能
一.进程和多线程的概念以及线程的优点 打开Windo任务管理器可以看到很多正在运行着的exe程序,完全可以将运行在内存中的exe文件理解成进程,进程是受操作系统管理的基本运行单元. 线程可以理解成在进 ...
- Mac高效开发之iTerm2、Prezto和Solarized主题
本文首发于个人网站:Mac高效开发之iTerm2.Prezto和Solarized主题 工欲善其事必先利其器,作为开发,我追求极致的高效,因此会在很多细节上追求效率,例如:命令行窗口敲命令的时候,如果 ...
- vue订阅者模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- GUI编程(Tkinter) 笔记分享
Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的 ...
- centos 7 防火墙firewall 与iptables 的一些常用命令
CentOS 7的防火墙配置跟以前版本有很大区别,CentOS7这个版本的防火墙默认使用的是firewall,与之前的版本使用iptables不一样. firewall常用命令 service fir ...
- 百度语音合成---前端vue项目
☞:官方文档 ☞:网页示例 具体步骤: 1.通过 socket.io 接收后端传过来的数据. 2.判断是否在播放声音. 如果没有则直接获取百度 token 播放声音 3.如果有,则存入数组.声音播放 ...