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])   --> 多对多的设置关联的数据

 

posted @ 2018-10-30 17:14  .why  阅读(578)  评论(0)    收藏  举报
Live2D