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


Django--models一对多的更多相关文章

  1. django models的点查询/跨表查询/双下划线查询

    django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...

  2. django models 数据库操作

    django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...

  3. Django models 操作高级补充

    Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra

  4. Django models Form model_form 关系及区别

    Django models Form model_form

  5. Django models .all .values .values_list 几种数据查询结果的对比

    Django models .all .values .values_list 几种数据查询结果的对比

  6. django models数据类型

    Django Models的数据类型 AutoField IntegerField BooleanField true/false CharField maxlength,必填 TextField C ...

  7. django models 类型整理 version:1.8.3

    django models 类型整理 version:1.8.3 网上百度到的最上面的一篇已经是11年的了,django变化很大,现在把1.8.3版的models类型大致整理了下贴出来 普通键部分 F ...

  8. Django models中关于blank与null的补充说明

    Django models中关于blank与null的补充说明 建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), ...

  9. Django Models的数据类型汇总

    https://blog.csdn.net/devil_2009/article/details/41735611 Django Models的数据类型 汇总 AutoField IntegerFie ...

  10. Django - models.py 应用

    Django - models.py 应用 编写 models.py 文件 from django.db import models # Create your models here. class ...

随机推荐

  1. 【原创】还原Hyper-V 到一个新的虚拟机

    Context: I need to restore VM31 backup (via 'Windows Server Backup' tool) as another new Hyper-V mac ...

  2. 【转】yahoo前端优化军规

    雅虎给出了前端优化的34条法则(包括Yslow规则22条) 详细说明,下载转发 ponytail 的译文(来自帕兰映像). Minimize HTTP Requests 减少http请求 图片.css ...

  3. 单一职责原则(Single Responsibility Principle)

    单一职责原则(SRP:The Single Responsibility Principle) 一个类应该有且只有一个变化的原因. There should never be more than on ...

  4. 翻译-高效DevOps的10项实践

    原文链接: http://www.drdobbs.com/architecture-and-design/top-10-practices-for-effective-devops/240149363 ...

  5. Java基础之I/O和file

    五.IO流1.IO流概述 (1)用来处理设备(硬盘,控制台,内存)间的数据. (2)java中对数据的操作都是通过流的方式. (3)java用于操作流的类都在io包中. (4)按照流操作的数据的类型不 ...

  6. Java用来进行批量文件重命名,批量提取特定类型文件

    原因: 因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能. 因为老师发的课件中,文件夹太多,想把docx都放在同一个文件夹下面,一 ...

  7. Java程序员的日常 —— 注册工厂的妙用

    注册工厂是一种很常用的框架书写方法,它适合于快速创建相同类型的对象. 举个栗子 比如一个家具工厂,有沙发.椅子.茶几等等,正常的编程模式是这样的: //创建 class 沙发{} class 椅子{} ...

  8. 每天一个linux命令(13):less 命令

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...

  9. EasyUI Datagrid Datetime(EasyUI DataGrid 时间格式化)

    EasyUI DataGrid 时间格式化 方法一: var Common = { //EasyUI用DataGrid用日期格式化 TimeFormatter: function (value, re ...

  10. 安装指定版本的cordova

    安装指定版本的cordova 刚接触cordova看到教程肯定是直接 npm install -g cordova 然后下载个集成的adt 以为万事大吉,开始hello world 玩玩没有想到最新的 ...