关系映射

1.一对一映射
  1.语法
    在关联的两个类中的任何一个类都可以增加对另一个类的引用

    属性 = models.OneToOneField(Entry)

    ex:
      class Author(models.Model):
        .... ....

      class Wife(models.Model):
        .... ....
        #增加对Author的一对一引用
        author = models.OneToOneField(Author)
    在数据库中:
      会生成一个外键(author_id)列在 wife 表中,会引用在 author 表的主键
    在 Author 中:
      增加一个隐式属性 - wife,来表示author所对应的wife(其实就是反向引用属性)
  2.查询
    1.正向查询 :通过 Wife 找 Author
      特点:通过自定义的关联属性查找对应实体
      wife = Wife.objects.get(id=1)
      author = wife.author
    2.反向查询 :通过 Author 找 Wife
      特点:通过反向引用属性查找对应的实体
      author = Author.objects.get(id=1)
      wife = author.wife

2.一对多映射
  1.语法
    在"多"表中增加对"一"表的外键引用,在"多"实体中增加对"一"实体的引用
    在 "多" 实体中增加:
      属性 = models.ForeignKey(Entry)

      ex: Book(多) 和 Publisher(一)
        class Book(models.Model)
          ... ...
          publisher = models.ForeignKey(Publisher)

    数据库中体现:
      Book 表中 增加一个外键列 publisher_id ,引用自 Publisher 表中的主键
    在实体类中的:
      1.Book 中会有一个 publisher 属性 来表示对应的 Publisher 的对象
      2.Publisher 中会有一个隐式属性 - book_set,用来表示该 publisher 对应的所有的 Book 对象的查询。

3.多对多映射
  1.语法
    在关联的两个类的任意一个类中,增加:
      属性 = models.ManyToManyField(Entry)
  ex: Author 与 Book 可以是多对多关联关系
    1位Author可以出版多本Book
    1本Book可以由多位Author联合编写
    class Author(models.Model)
      .... ....

    class Book(models.Model):
      ... ...
      authors = models.ManyToManyField(Author)
  正向引用:在 Book 中通过 authors 来表示对应的所有的书籍的查询
  反向引用:在 Author 中通过 book_set 来表示对应的所有的作者们的查询

原文地址:https://www.cnblogs.com/zengsf/p/9972521.html