zoukankan      html  css  js  c++  java
  • Django学习手册

    定义表结构:

    class Host(models.Model):
        hostname = models.CharField(max_length=32)
        port = models.IntegerField()
    
    class HostAdmin(models.Model):
        username = models.CharField(max_length=32)
        email = models.CharField(max_length=32)
        host = models.ManyToManyField(Host)
      #这条语句输入以后,会自动创建一个表。这里自动创建的表名为 app01_hostadmini_host,也就是第三张截图的表。

    添加数据:

    hostadmin表

     host表

     hostadmin_host 表

    多表操作(正向查找 hostadmin表 → host表):

    def index(request):
        # 添加/关联数据:
        #(找到第一张表的一条数据,然后再找到第二张表的数据,然后关联)
        # 方式一:
        # #admin表的一条数据
        # admin_obj = models.HostAdmin.objects.get(username='A1')
        # #host表中的一条数据
        # host_list = models.Host.objects.filter(id__lt=4)
        # #通过admin多对host键add增加
        # admin_obj.host.add(*host_list)
        #第二张表的数据之间关联第一张表的数据
    
        # 方式二:
        # obj = models.HostAdmin.objects.filter(id=2)
        # obj.host.add(2)
        #单个
        #
        # obj.host.add(3, 4)
        #元组
        #
        # obj.host.add(*[2,3,4,5])
        #字典
        #通过id进行关联,id=2的数据关联第二张表的id 2 ,id 3 ,id 4,id 5
    
        # 删除数据
        # obj.host.remove(1)
        # obj.host.remove(2,3)
        # obj.host.remove(*[1,2,3,4])
    
        # 清除数据
        # obj.host.clear()
    
        # 更新数据
        # obj.set([3,4,5])
        # 注意,这样配置了以后,就只剩3,4,5 数据条目了,其他都被清除了。
    
        # 单条查询
        # admin_obj = models.HostAdmin.objects.get(username='A1')
        # # print(admin_obj.host.all())
        # for i in admin_obj.host.all():
        #     print(i,i.hostname)
    
        #查询所有
        # admin_all_obj = models.HostAdmin.objects.all()
        # for i in admin_all_obj:
        #     print(i.username)
        #     print("-"*3)
        #     for i2 in i.host.all():
        #         print(i2.hostname)
        #     print("*"*10)
        #i.host.all()也是obj对象,要取得其中的数据用嵌套for循环。
    
        return HttpResponse("OK")

     单条查询 结果:

    查询所有 结果:

    小结:

    ORM多表操作,通过定义的 :host = models.ManyToManyField(Host),进行跨表操作。★★★★

     反向查询:

    # #反向关联
        # #host表中的数据
        # host_obj = models.Host.objects.get(id=3)
        # #admin 表中的数据
        # admin_list = models.HostAdmin.objects.filter(id__gt=3)
        # #通过hostadmin_set  增加一条关联
        # host_obj.hostadmin_set.add(*admin_list)
    
        # 反向查询
        # 查询:
        # host_obj = models.Host.objects.get(hostname="B2")
        # print(host_obj.hostname)
        # for i in host_obj.hostadmin_set.all():
        #     print(i.username)
    
        # 区别总结:区别在于正向查拥有自己创建好的host句柄,可以直接使用add方法添加,而反向查没有,所以要使用django为我们提供的set句柄。
  • 相关阅读:
    Javascript之DOM性能优化
    移动端内容超出容器滑动会卡的解决办法
    Oracle表、列、约束的操作
    Oracle INTERVAL DAY TO SECOND数据类型
    linux下mysql的root密码忘记解决方法
    Oracle:grouping和rollup
    Oracle 中的Pivoting Insert用法
    使用INTERVAL YEAR TO MONTH类型
    SQL:deferrable initially deferred
    ORA-25154/ORA-01748
  • 原文地址:https://www.cnblogs.com/Anec/p/9543369.html
Copyright © 2011-2022 走看看