zoukankan      html  css  js  c++  java
  • Django进阶Model篇006

    接着前面的例子,举例多表查询实例如下:

    1.查询作战的所有完整信息。

    >>> AuthorDetail.objects.values('sex','email','address','birthday','author__name')

    2.查询《持续集成实践》这本书的作者姓名,还有出版社的名字

    >>> Book.objects.filter(title='持续集成实践').values('authors__name','publisher__name')

    3.查询潘晓明写了一些什么书

    >>> Book.objects.filter(authors__name='潘晓明').values('title')

    4.查询机械工业出版社都出版了一些什么书籍

    >>> Book.objects.filter(publisher__name='机械工业出版社').values('title')
    >>> publisher = Publisher.objects.get(name='机械工业出版社')
    >>> publisher.book_set.all().values('title')

    5.查询机械工业出版社都有哪些作者出过书

    >>> Book.objects.filter(publisher__name='机械工业出版社').values('title','authors__name')

    多表查询技巧:

    __:两个下划线可以生成连接查询,查询关联的字段信息

    _set:提供了对象访问相关联表数据的方法。但这种方法只能是相关类访问定义了关系的类(主键类访问外键类)。

    ManyToMany

    多对多之查询:

    正向查询:查询书籍id=1的所有作者

    b1=Book.objects.get(id=1)
    b1.authors.all()

    反向查询:查询id=3的作者所出版的所有书籍

    a1=Author.objects.get(id=3)
    a1.book_set.all()

    正向联表查询:查询书籍id=1的所有作者

    Book.objects.filter(id=1).values('authors__name')

    反向联表查询:查询id=3的作者所出版的所有书籍

    Author.objects.filter(id=3).values('book__title')

    多对多添加:

    正向添加:

    b1=Book.objects.get(id=1)
    a1=Author.objects.get(id=2)
    b1.authors.add(a1)   #可以直接添加obj
    b1.authors.add(3)    #可以直接添加id
    
    au_list=Author.objects.all()
    b1.authors.add(*au_list) #可以直接添加obj列表
    b1.authors.add(*[1,2,3]) #可以直接添加id列表

    反向添加:

    a2=Author.objects.get(id=1)
    b2=Book.objects.get(id=2)
    a2.book_set.add(b2)
    a2.book_set.add(3)
    
    a2.book_set.add(*Book.objects.all())
    a2.book_set.add(*[1,2,3,4])

    多对多删除:

    多对多的删除有两个参数:

    • clear() 清空数据
    • remove() 删除数据

    正向删除:

    # 删除id=1的书籍的所有作者
    b1=Book.objects.get(id=1)
    b1.authors.clear()   
    
    # 删除id=2的书籍的作者id=1,2,5
    b2=Book.objects.get(id=2)
    b2.authors.remove(1)
    b2.authors.remove(*[2,5]) 

    反向删除:

    # 删除作者id=1的所有书籍
    a1=Author.objects.get(id=1)
    a1.book_set.clear()

    ***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
  • 相关阅读:
    iOS 11和xcode9
    #ifdef __OBJC__宏定义的作用
    项目小分析------从 优普钱包工资单 谈代码的规范性和界面的一般写法
    UIAlertView 点击按钮后控制其是否消失
    iOS 限制输入字数完美解决方案
    tn文本分析语言(四) 实现自然语言计算器
    重磅开源:TN文本分析语言
    差一点其实差很多
    光棍节之夜,用数据分析帮女神学姐选婚房
    你能排第几?2016互联网行业薪酬数据分析
  • 原文地址:https://www.cnblogs.com/guanfuchang/p/6486698.html
Copyright © 2011-2022 走看看