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,都一样的用法

  • 相关阅读:
    ADPlus
    'telnet' is not recognized as an internal or external command
    图片二进制上传2
    window.opener返回值的用法
    UrlRewriter 重写的问题
    缩略图 水印
    读取二进制图片问题
    正则表达式匹配问题
    .NET读excl数据
    js调用其他页面输出内容
  • 原文地址:https://www.cnblogs.com/xiaohuyi/p/10282587.html
Copyright © 2011-2022 走看看