Django之跨表查询——正反向查询(ManyToManyField)

1.多对多查询:涉及到两张表以上的查询。

    author_obj = models.Author.objects.first()
    print(author_obj.name)
    # 查询金老板写过的书
    ret = author_obj.books.all()
    print(author_obj.books,type(author_obj.books))
    print(ret)

    # 1.create
    # 通过作者创建一本书,会自动保存
    # 做了两件事:
    # 1.在book表里创建一本新书;2.在作者和书的关系表中添加关联记录
    author_obj.books.create(title="金老板自传",publisher_id=2)
    # 2.add
    # 在金老板关联的书里面,再加一本id是4的书
    book_obj = models.Book.objects.get(id=4)
    author_obj.books.add(book_obj)
    # 3.添加多个
    book_objs = models.Book.objects.filter(id__gt=2)
    # 不可以直接add(book_objs)
    # 要把列表打散,再传进去
    author_obj.books.add(*book_objs)
    # 4.直接添加id
    author_obj.books.add(3)
    # 5.remove
    # 从金老板关联的书里面把开飞船 删掉
    book_obj = models.Book.objects.get(title="跟金老板学开飞船")
    author_obj.books.remove(book_obj)
    # 从金老板关联的书里面把id是8的记录删掉
    author_obj.books.remove(8)
    # clear
    # 清空
    # 把id=2的作者所关联的所有书都删掉
    author2_obj = models.Author.objects.get(id=2)
    author2_obj.clear()
    # 会提示:AttributeError: 'Author' object has no attribute 'clear'

猜你喜欢

转载自www.cnblogs.com/cwj2019/p/11783144.html