外键的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()