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()    #此类型用户数量





















  • 相关阅读:
    Javascript高级程序设计笔记(很重要尤其是对象的设计模式与继承)
    javascript面向对象技术基础总结
    cURL范例(包括错误输出和详情输出)
    javascript知识点总结
    php memcache知识点总结
    php mcrypt加密实例
    spl处理文件(文件详细信息、文件遍历、查询指定行、写入CSV文件)
    table-layout 属性
    backface-visibility 属性 :隐藏被旋转的 div 元素的背面
    HTML 5 全局 contenteditable 属性
  • 原文地址:https://www.cnblogs.com/daliangtou/p/5423913.html
Copyright © 2011-2022 走看看