Django(part35)--多对多映射

学习笔记,仅供参考



数据表关联关系映射


多对多映射


多对多表现了对象之间多对多的复杂关系,如: 每个人都有不同的学校(小学,初中,高中,…),每个学校都有不同的学生。


  • 语法
#在关联的两个类中的任意一个类中,增加:
属性 = models.ManyToManyField(Entry)
  • 示例
#一个作者可以出版多本图书
#一本图书可以被多名作者同时编写

class Author(models.Model):
    name = models.CharField('作家', max_length=50)

class Book(models.Model):
    title = models.CharField('书名', max_length=50)
    authors = models.ManyToManyField(Author)

查询


  • 通过 book 查询对应的所有的 authors
#可以通过authors表示对应所有Author的查询对象

book.authors.all()
#获取 book 对应的所有的author的信息

book.authors.filter(age__gt=50)
#获取book对应的author中年龄大于50岁的作者的信息

  • 通过 author 查询对应的所有的books
#author会生成一个属性 book_set 用于对book查询对象进行相关操作
author.book_set.all()
author.book_set.filter()
author.book_set.create(...)  # 创建新书并联作用author
author.book_set.add(book)   # 添加已有的书为当前作者author
author.book_set.clear()  # 删除author所有并联的书
author.book_set.remove()  # 删除所author所有并联的书

添加数据


from bookstore import models
author1 = models.Author.objects.create(name='黄老师')
author2 = models.Author.objects.create(name='王老师')

book1 = author1.book_set.create(title="Python")
#创建新书并关联黄老师
author2.book_set.add(book1)
#添加Python到王老师名下

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/106894962