zoukankan      html  css  js  c++  java
  • 浅谈 django Models中的跨表

    跨表操作在数据库操作非常常用,虽然其会降低读取数据的性能,但是它能节约数据在硬盘中的占用,优化数据表的结构和各自之间的关系。

    在sql中,一般跨表需要用到 join 关键字

    select * from table1 left join table2 on table1.id = table2.id

    那到了Django框架中,又是如何实现跨表的呢?

    #创建一个类
    class userinfo(Models):
        user_name = models.charField(max_length=32)
        m = models.manytomanyField('usertype')
    
    class usertype(Models):
        name = models.charField(max_length=32)

    通过m,Django内部就会自动生成第三张关系表。

    接下来,该如何对这第三张表进行操作呢?

    #创建一个类
    class userinfo(Models):
        user_name = models.charField(max_length=32)
        m = models.manytomanyField('usertype')
    
    class usertype(Models):
        name = models.charField(max_length=32)
    
    #通过创建一个userinfo的对象,通过对象的m属性进行增删改查
    obj= userinfo()
    obj.m.add()  增加
    obj.m.remove()  删除
    obj.m.set()   更新
    obj.m.clear()  清楚全部数据
    obj.m.all()    查询

    再说说通过外键进行正向查询和反向查询

    #正向
    objs = models.userinfo.objects.values('id','user_name','fk__name')
    for obj in objs:
        obj.fk.name
    
    #反向     小写的表格名__xxx
    objs=models.usertype.objects.values('id','name','userinfo__user_name')
    for obj in objs:
        obj.userinfo__set.all()

    PS:values 可以替换成values_list 和filter,都一样的用法

  • 相关阅读:
    常用颜色
    在VS2010中打开VS2012的项目
    vs2012 断点不能调试
    Setup Factory 打包.netframework 2.0
    Access 中数据库操作时提示from子句语法错误
    vs2012 .netFramwork2.0发布到xp
    c# access插入null值
    Visual Studio安装卸载模板
    Codeforces 455D
    ACdream 1157 (cdq分治)
  • 原文地址:https://www.cnblogs.com/xiaohuyi/p/10282587.html
Copyright © 2011-2022 走看看