ORM之一对多外键的CRUD

外键的CRUD

一对多外键字段的crud

增 

传实际字段

models.Book.objects.create(title="三国",price=123,publish_id=1)

第二种放虚拟字段

pub_obj = models.Publish.objects.filter(pk=2).first()

models.Book.objects.create(title="三国",price=123,publish=pub_obj)

models.Publish.objects.filter(pk=1).delete() 级联删除,出版社这条删除了,那么关联的书籍中有出版社的记录也会删除

models.Book.objects.filter(pk=1).update(publish_id=2)   同样可以传虚拟字段一个publish对象

多对多外键字段的crud

本质:在操作第三张关系表

无法通过models.表名 摸到第三张表

book_obj = models.Book.objects.filter(pk=1).first()  拿到虚拟字段就相当于于到了第三张表。

book_obj.authors.add(1)  为书籍id为1的书籍绑定一个主键为1的作者。

多对多,那么一次可以添加多条, book_obj.authors.add(2,3)

同样支持放对象,查几个Author对象,然后add(author对象)

book_obj.authors.remove(author_obj1,author_obj2)

改 

book_obj.authros.set([1,2])  set()里面必须可迭代  1   1  , 1   2

book_obj.authros.set([3]) 回将原来所有的关系删掉,新建 1  3对应关系

同样也可以放对象。

清空

一本书永久下架了,清空这个书和作者的关系

book_obj.authors.clear()

看十遍不如自己写一遍!巩固基础,纵横开拓!
原文地址:https://www.cnblogs.com/gyxpy/p/14711318.html