表关系:

  • 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——表外键的更多相关文章

  1. sql查询指定表外键约束

    //////////////////查询指定表外键约束select a.name as 约束名, object_name(b.parent_object_id) as 外键表, d.name as 外 ...

  2. Oracle系统表外键的更名

    正在看的ORACLE教程是:Oracle系统表外键的更名. Oracle中表的外键是保证系统参照完整性的手段,而参照完整性是指分布在两个表中的列所满足的具有主从性质的约束关系.外键涉及到两个表,其中一 ...

  3. mysql数据库中表的外键约束

    一.外键约束 1.什么是外键? 外键指的是其他表中的主键,当做该表的外键. 2.创建外键. 2.1 可在创建表的时候直接创建外键,如图所示: create table table_name  (字段名 ...

  4. SQL语句添加表外键

    ALTER TABLE 表名 ADD CONSTRAINT FK_ID FOREIGN KEY(外键列) REFERENCES 外键表(外键表主键)

  5. rest framework 序列化之depth遇到用户表外键的尴尬情况

    rest framework 序列化之depth遇到用户表外键的尴尬情况 问题:ModelSerializer序列化使用depth=1直接扩表把用户表所有信息查询出来的情况 class xxxSeri ...

  6. MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别

    DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...

  7. sql 删除数据库表 外键

    --/第1步**********删除所有表的外键约束*************************/   DECLARE c1 cursor for select 'alter table ['+ ...

  8. DROP TABLE ** CASCADE CONSTRAINTS PURGE删除表的时候级联删除从表外键

    1.关于 cascade constraints 假设A为主表(既含有某一主键的表),B为从表(即引用了A的主键作为外键). 则当删除A表时,如不特殊说明,则 drop table A 系统会出现错误 ...

  9. 2017年10月22日 基础SQL语句&数据库创建主外键关系

    1.SQL语句的注释 双减号:-- 或者/**/2.创建数据库create database 数据库名称(不允许以数字开头,不允许以符号开头,不要起汉语名字) 3.如何选中这个数据库use 数据库名 ...

随机推荐

  1. 详解AJAX工作原理以及实例讲解(通俗易懂)

    什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...

  2. Linux下yum与apt-get

    linux系统基本上分两大类: 1.RedHat系列:Redhat.Centos.Fedora等 2.Debian系列:Debian.Ubuntu等 RedHat 系列 1 常见的安装包格式 rpm包 ...

  3. 张高兴的 .NET Core IoT 入门指南:(五)PWM 信号输出

    什么是 PWM 在解释 PWM 之前首先来了解一下电路中信号的概念,其中包括模拟信号和数字信号.模拟信号是一种连续的信号,与连续函数类似,在图形上表现为一条不间断的连续曲线.数字信号为只能取有限个数值 ...

  4. HTML CSS整理笔记

    ——修改placeholder提示的样式: 1.除IE外通用写法 类名或标签名::placeholder {color: red;}2.加兼容前缀写法 css超出一行显示省略号:给定宽度(width: ...

  5. Mysql高手系列 - 第27篇:mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发设计及跨库转账问题

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第27篇. 本篇文章我们先来 ...

  6. git jenkins 基本部署 jenkins持续集成

    1.什么是持续集成?  持续集成来简化我们的工作 还能让产品可以快速迭代,同时还能保持代码高质量产出.2.Jenkins的安装配置:        [root@jenkins ~]# yum inst ...

  7. 百万年薪python之路 -- while循环

    day02 1.while循环 -- while关键字 while 空格 条件 冒号 缩进 循环体 while 5>4: print("Hello World!") 数字中非 ...

  8. 设计模式C++描述----10.装饰(Decorator)模式

    一. 举例 我之前做过一个文件系统就叫 MyFileSys 吧,后来的话,客户想加入一些附加功能,比如压缩.加密.杀毒之类的操作,这些附加操作没有先后顺序,比如你可以先压缩再加密,也可以先杀毒再压缩, ...

  9. Oauth 2.0学习

    OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版. 本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为R ...

  10. 程序员接私活经验总结,来自csdn论坛语录

    以下为网上摘录,以做笔记: 可是到网上看看,似乎接私活也有很多不容易,技术问题本身是个因素,还有很多有技术的人接私活时被骗,或者是合作到最后以失败告终,所以想请有经验的大侠们出来指点一下,接私活是怎么 ...