zoukankan      html  css  js  c++  java
  • Django--models一对多

    一对多--foreignkey


    应用场景

    当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)

    例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。



    创建表

    根据代码中定义的类来自动生成数据库表。

    1
    2
    3
    4
    5
    6
    7
    class UserType(models.Model):
        caption = models.CharField(max_length=32)
     
    class UserInfo(models.Model):
        user_type = models.ForeignKey(UserType)# user_type对象中封装id,caption
        username = models.CharField(max_length=32)
        age = models.IntegerField()


    创建数据

    caption数据

    1
    2
    3
    for co in ['CEO','CTO','COO']:
        dic = {'caption':co}
        models.UserType.objects.create(**dic)

    userinfo数据

    两种方法:
    NO.1
    1
    2
    dic = {'username':'xx','age':88,'user_type_id':1}
        models.UserInfo.objects.create(**dic)
    NO.2
    1
    2
    dic = {'username':'xx','age':88,'user_type':models.UserType.objects.get(id=1)}
        models.UserInfo.objects.create(**dic)



    普通查找

    1
    2
    3
    result = models.UserInfo.objects.all()
        for item in result:
        print item.username,item.age,item.user_type.caption



    正向查找

    foreignkey在这张表中叫正向查找,跨表filter用双下划线

    例如:找所有CEO的用户
    1
    models.UserInfo.objects.filter(user_type__caption='CEO')



    反向查询

    反向查询时,除了自己的id和caption列,Django的ORM多提供了一个UserInfo_set列,还可以在他的基础上加条件

    获取用户类型CEO,并且用户名是xxx的
    1
    2
    line = models.UserType.objects.get(id=1)
    print line.userinfo_set.filter(username='xxx')
    获取某个人是什么用户类型?当前用户类型下有多少人?​

    userinfo是Django在UserType表中自动创建的隐藏字段

    1
    2
    3
    user_type_obj = models.UserType.objects.get(userinfo__username='xxx')
    print user_type_obj.caption    #用户类型
    print user_type_obj.userinfo_set.all().count()    #此类型用户数量





















  • 相关阅读:
    绘制SVG内容到Canvas的HTML5应用
    HT for Web 3D游戏设计设计--汉诺塔(Towers of Hanoi)
    HT for Web自定义3D模型的WebGL应用
    纯Shading Language绘制飞机火焰效果
    纯Shading Language绘制HTML5时钟
    HTML5版的String Avoider小游戏
    基于HT的CSG功能构建HTML5的3D书架
    HTML5 Web 客户端五种离线存储方式汇总
    基于HTML5的Drag and Drop生成图片Base64信息
    HT for Web可视化QuadTree四叉树碰撞检测
  • 原文地址:https://www.cnblogs.com/daliangtou/p/5423913.html
Copyright © 2011-2022 走看看