表关系:

  • 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. 告别硬编码,mysql 如何实现按某字段的不同取值进行统计

    上周我突然意识到,我在grafana上写的 sql 语句存在多处硬编码.这篇笔记将记录如何实现没有硬编码的sql语句,以及自学编程过程中如何应对自己的笨拙代码和难题不断的状况. 1.有效但粗笨的硬编码 ...

  2. php分布式是什么

    分布式网络存储技术是将数据分散地存储于多台独立的机器设备上.分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单存储服务 ...

  3. Ubuntu中用户名密码和root密码修改

    用户名密码和root密码不是同一个密码 重置(修改)root密码 ubuntu的root初始密码是随机的,每次开机都有一个新的root密码修改方法如下: 1.sudo passwd root 2.此处 ...

  4. 关于M23内核简介 - 待续

    1.定位 M23是基于最新的ARMv8-M构架的主要关注低功耗应用的微控制器,未来会是M0.M0+的替代品. M33是基于最新的ARMv8-M构架的主要关注高能效应用的微控制器,未来会替换M3.M4. ...

  5. mybatis-spring 启动过程和调用过程

    mybatis-spring 可以为我们做什么 mybatis框架已经很不错了,它把配置和执行sql的通用过程抽象出来.只要你符合mybatis框架的要求,首先有正确的配置,然后有model,inte ...

  6. C++学习笔记14_C#调用dll

    1. 首先C++创建dll项目,各种调第三方库,把这些东西都弄好后,整一个导出接口,例如: extern "C" __declspec(dllexport) int Add(int ...

  7. [系列] Go gRPC 调试工具

    目录 概述 写一个 gRPC API grpcui 使用 go-gin-api 系列文章 概述 最近这段时间工作挺忙的,发现已经 3 周没更文了... 感谢你们还在,今天给大家分享一款 gRPC 的调 ...

  8. Pandas文本数据处理

    先初始化数据 import pandas as pd import numpy as np index = pd.Index(data=["Tom", "Bob" ...

  9. [BZOJ2821][Luogu4135] 作诗

    由于BZOJ这题要contact lydsy2012@163.com,所以就放个洛谷的传送门(我木有BZOJ权限号啊0.0) 诶?这不是莫队裸题?? 等等--这题强制在线欸,没办法莫队了,肿么破? 之 ...

  10. 吐血推荐珍藏的Visual Studio Code插件

    作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了.好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难.眼看这段经历要告一段 ...