ORM之一对多VS多对多
书籍的增删改查(一对多,出版社与书) ORM中定义外键 models.ForeignKey(to='外键关联的类名') 注意事项: ORM在数据库中会给外键字段自动加_id 外键字段通常建在多(书) 查询 book_obj.publisher --> 书籍关联的出版社对象 book_obj.publisher_id --> 书籍关联的出版社id(数据库中真正保存的那一列的值) Book.objects.all() --> 返回的是一个列表(QuerySet) Book.objects.filter() --> 返回的是一个列表(QuerySet) Book.objects.get() --> 返回的是一个具体书籍对象 删除 Book.objects.filter().delete() Book.objects.get().delete() 添加 添加页面把所有的出版社数据展示成select标签 模态框添加,区别于跳转到新页面添加!!! 添加(注意参数!!!)) Book.objects.create(title='', publisher='出版社对象') Book.objects.create(title='', publisher_id='出版社id值') 编辑 模板语言 if 判断 {% if publisher == book.publisher %} <option selected value="{{ publisher.id }}">{{ publisher.name }}</option> {% else %} <option value="{{ publisher.id }}">{{ publisher.name }}</option> {% endif %} 注意.save() 修改本表格内容需要保存 基于对象的修改 book_obj = Book.objects.get(id='id值') book_obj.title = '书名' book_obj.publisher_id = '出版社id值' book_obj.save() 基于QuerySet的修改 Book.objects.filter(id='id值').update(title='值',publisher_id='值')
ORM里面设置多对多(作者与书) book = models.ManyToManyField(to='Book') 多对多字段建在哪张表都可以,通常是建立在正向查询多的那一边(作者...) 优势 帮我们创建第三张关系表 提供了很多方便的管理方法 author_obj.book.all() --> 查询作者关联的所有书籍 author_obj.book.add(id1,id2) --> 给作者添加关联书籍信息 author_obj.book.set([id1, di2,...]) --> 给作者设置关联书籍信息 多对多的增删改查 查 Author.objects.all() --> [对象1, 对象2] Author.objects.filter(条件) --> [对象1, 对象2] Author.objects.get(条件) --> 对象 在Django的模板语言(HTML)中,不需要加括号 # 多对多查询 author_obj.book.all() --> [book_obj1, book_obj2, ...] 增 add(*[]) author_obj.book.add(id1, id2) --> 多对多添加关联的数据 删除 delete() Django2.0以上的版本,外键需要手动设置级联操 on_delete=models.CASCADE 修改 set([]) author_obj.book.set([id1, id2]) --> 多对多的设置关联的数据
清风深知杨柳意,啤酒龙虾难相聚。

浙公网安备 33010602011771号