zoukankan      html  css  js  c++  java
  • Django 模型层关系映射

    一、一对一映射
    1、什么是一对一
    A表中的一条记录只能与B表中的一条记录相关联
    如:一夫一妻制

    2、语法
    允许在关联的两个类的任何一个类中 增加:
    属性 = models.OneToOneField(Entry)
    3、查询
    class Wife(models.Model):
      ...
      author=models.OneToOneField(Author)

    1、正向查询:通过wife 找 author
    wife = Wife.objects.get(id=1)
    author = wife.author

    2、反向查询:通过author 找 wife

    wife 是Django通过OneToOneField在Author中默认增加的一个隐式属性

    author=Author.objects.get(id=14)
    wife = author.wife

    二、一对多映射
    1、什么是一对多
    A表中的一条数据可以与B表中的多条数据关联
    B表中的一条数据只能与A表中的一条数据关联

    如:出版社(Publisher) 和 图书(Book)

      商品类型(GoodsType) 和 商品(Goods)

    2、在数据库中的体现
    通过外键(ForeignKey)来体现一对多
    在"多"表中增加外键(ForeignKey)对"一"表的主键进行引用

    3、语法
    使用外键(ForeignKey)
    在"多"的实体中,增加:
    属性=models.ForeignKey(Entry)

    4、查询
    Book(多) 和 Publisher(一)

    class Book(models.Model):
      ... 
      publisher=models.ForeignKey(Publisher)

    1、正向查询 - 通过Book查询Publisher
    book = Book.objects.get(id=1)
    publisher = book.publisher
    2、反向查询 - 通过Publisher查询Book

    Django会在 1 的实体中增加 关联对象_set 属性,用于查询 多 的数据

    结合 Publisher 和 Book 之间关系 :在 Publisher实体中增加了一个 book_set 属性

    publisher=Publisher.objects.get(id=1)
    books = publisher.book_set.all()

    三、多对多映射
    1、什么是多对多
    A表中的一条记录可以与B表中的任意多条记录匹配
    B表中的一条记录可以与A表中的任意多条记录匹配
    如:作者与书籍

    2、在数据库中的体现
    必须创建第三张表,关联涉及到的两张表数据
    3、语法
    允许在任何一个实体中增加操作:
    entry = models.ManyToManyField(Entry)

    4、查询
    class Author(models.Model):
      ... 
      book = models.ManyToManyField(Book)
    1、正向查询-通过Author查询所有的Book
    author = Author.objects.get(id=1)
    books = author.book.all()

    2、反向查询-通过Book查询所有的Author
    Django中 会在Book 实体中增加一个隐式属性 author_set

    book = Book.objects.get(id=1)
    authors = book.author_set.all()

  • 相关阅读:
    Hdu 3564 Another LIS 线段树+LIS
    利用ESLINT进行js 语法检查,以及局部安装时遇到的一些坑
    操作系统杂谈
    算法杂谈
    前端杂谈
    操作系统复习
    vue之——从彩笔的进步之路
    一丢丢学习之webpack4 + Vue单文件组件的应用
    计蒜客 2017复赛 百度地图导航
    electron打包之真的恶心
  • 原文地址:https://www.cnblogs.com/hooo-1102/p/11775714.html
Copyright © 2011-2022 走看看