Django模型层—多表操作

添加记录

一对多

方式1:
   publish_obj=Publish.objects.get(nid=1)
   book_obj=Book.objects.create(title="",publishDate="2012-12-12",price=100,publish=publish_obj)
  
方式2:
   book_obj=Book.objects.create(title="",publishDate="2012-12-12",price=100,publish_id=1)

多对多

(1# book=Book.objects.filter(name='红楼梦').first()
    # print(book)
    # 在点publish的时候,其实就是拿着publish_id又去app01_publish这个表里查数据了
    # print(book.publish)
    # (2)book.authors.all()

多对多关系以及其他API

book_obj.authors.remove()      # 将某个特定的对象从被关联对象集合中去除。    ======   book_obj.authors.remove(*[])
book_obj.authors.clear()       #清空被关联对象集合
book_obj.authors.set()         #先清空再设置 

基于对象的跨表查询

一对多查询

正向查询按字段,反向查询按表名_set

 

  A表book(关联自动段)   B表 publish
        # 正向查询   A--->B    关联字段再A,A去查询B表,这叫正向查询,按字段来查
        # 反向查询   B--》A    关联字段再A,B去查询A表,这叫反向查询,按表明小写_set

 

 

 

  # 一对多正向查询
    book=Book.objects.filter(name='红楼梦').first()
    print(book.publish)#与这本书关联的出版社对象
    print(book.publish.name)
    # 一对多反向查询
    # 人民出版社出版过的书籍名称
    pub=Publish.objects.filter(name='人民出版社').first()
    ret=pub.book_set.all()
    print(ret)
复制代码

多对多查询

正向查询按字段,反向查询按表名_set

        A表book(关联自动段)   B表 publish
        # 正向查询   A--->B    
        # 反向查询   B-->A 
    总结:一对一  正向:按字段  反向:按表名小写
          一对多  正向:按字段  反向:按表名小写_set
          多对多  正向:按字段  反向:按表名小写_set    

 

   # 正向查询----查询红楼梦所有作者名称
    book=Book.objects.filter(name='红楼梦').first()
    ret=book.authors.all()
    print(ret)
    for auth in ret:
        print(auth.name)
    # 反向查询 查询lqz这个作者写的所有书
    author=Author.objects.filter(name='lqz').first()
    ret=author.book_set.all()
    print(ret)

基于双下划线跨表查询

正向查询按字段,反向查询按表名小写用来告诉ORM引擎join哪张表
    总结:用__告诉orm,要连接那个表
        一对一: 正向:按字段  反向:按表名小写 
        一对多:  正向:按字段  反向:按表名小写 
        多对多:  正向:按字段  反向:按表名小写 

 

posted @ 2018-09-11 16:26  丿低八度的程序员之路  阅读(79)  评论(0)    收藏  举报