一对多、一对一
增 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()
浙公网安备 33010602011771号