一对多、一对一
增 create()

models.Book.objects.create(title='三国演绎',price=11.22,publish_id=1)  外键字段是publish_id,直接把出版社的主键值给它就行。(方式一)

publish_obj = models.Publish.objects.filter(pk=2).first()             拿到出版社对象,把对象给它也可以。(方式二)

models.Book.objects.create(title='三国演绎',price=11.22,publish=publish_obj )

 

改 .update()

models.Book.objects.filter(pk=3).update(publish_id=1)  先过滤pk再修改,  也可以放对象 

 

删 .delete() 

models.Publish.objects.filter(pk=1).delete()  级联更新+删除(把主键值1的出版社和书表中出版社外键字段为1的书籍也删除了。

 

*******************************************************

多对多、操作第三张表
1、增 add()
只能借助于书对象或者作者对象操作第三张表
给authors_id字段添加作者id,这个authors是就相当于ManytoManyField.(虚拟字段)

book_obj = models.Book.objects.filter(pk=3).first()   书籍id为3的对象
book_obj.authors.add(1,2)  在第三张表中添加书与作者的对应。
book_obj.authors.add(book_obj1,book_obj2) # 也可以放对象

 

 

修改set()  参数必须是可迭代对象
# 给pk=4的这本书修改对应的作者id

book_obj = models.Book.objects.filter(pk=4).first()
book_obj.authors.set([1,2])   作者id为2的如果没有,则添加一条对应记录
book_obj.authors.set([author_obj1,author_obj2])  对象也可以

 



删除remove()
book_obj = models.Book.objects.filter(pk=4).first()
也是可以放多个,还有对象,和上面的一样
# 删除书id为4对应的作者id为1的这条记录
book_obj.authors.remove(1)


清空clear()

把关于pk=4的这本书的记录全部删除
book_obj = models.Book.objects.filter(pk=4).first()
book_obj.authors.clear()

posted on 2021-07-09 18:28  孟玉  阅读(115)  评论(0)    收藏  举报