【Python】django模型models的外键关联使用

Python 2.7.10,django 1.8.6

外键关联:http://www.bubuko.com/infodetail-618303.html

字段属性:http://www.cnblogs.com/lhj588/archive/2012/05/24/2516040.html

过滤条件:http://www.douban.com/note/301166150/

django模型很强大,可以通过外键实现:
  1、主表查询子表
  2、子表查询主表
  3、主表查询主表(多对多情况)

下面举例中表A、B都为models中的class,实际表名应该为“app_小写的classname”

获得的结果是字典,多个结果就是字典组成的列表,可以通过.__dict__['字典key']取出结果

上面三种关联查询的通用实现方法是:
  A和B有关联字段,可以直接使用A表关联字段查询B表,例如

from appname.models import A, BB.objects.filter(a=?)

提示:
1、必须使用关联的字段作为条件,上面例子中a是表A与表B关联的字段名
2、反过来同样可以关联查询,例如A.objects.filter(b=?)

使用对象的子表_set方法
假设A是主表,B是子表,可以使用

from appname.models import A, Bobject_a = A.objects.get(子表外键对应主表的字段)
object_a.b_set.all(条件)

提示:
1、从主表获得的对象查询子表时,方法一定要“小写子表名+_set”,或者在class中使用related_name定义主表对象查询子表时使用的方法名称。
例如子表字段:

class B(models.Model):b_column_1 = models.ForeignKey(A, related_name = 'b')

2、主表获取对象必须要用get方法,但是条件不限制为对应关联字段
3、不能反向子表查询主表
4、多对多的关系要区分谁是主表谁是从表,也可以通过数据库中的表理解,如果多对多生成了中间表,中间表存在两个外键,那么只能通过顺序靠前的外键查询靠后的外键,不能反过来

django自带的模型例如auth中的user/group/permission可以修改,首先找到django安装路径,然后修改django/contrib/auth/models.py,比如新加表字段,然后执行命令同步到数据库中:

[root@test test1]# python manage.py makemigrations
[root@test test1]# python manage.py migrate

in除了__in语法也可以使用extra方法

model_a.objects.extra(where=['id IN (3, 4, 5, 20)'])

model支持group by及count/sum/max/mix等方法

from django.db.models import Count, Min, Max, Sum
#等价 select date,sum(data_length) as s from model_table group by date order by date
model_idl.objects.values('date').annotate(s=Sum('data_length')).order_by("-date")

使用外检的表join

参考:https://www.douban.com/note/301166150/

#name字段是外检关联字段,type是关联表的条件字段
相当于 select * from b join a on b.name=a.id  where a.type=2 and b.status=0
model_b.objects.filter(status = 0, name__type__contains = 2)

另外models的update方法只能适用于filter获得的结果,get获取到的单个对象无法使用

单个对象可以使用:

object.属性= value

object.save()

posted on 2015-12-14 10:50 poorX 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/jiangxu67/p/5044462.html

【Python】django模型models的外键关联使用相关推荐

  1. Python sqlalchemy orm 多对多外键关联

    多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...

  2. Python sqlalchemy orm 多外键关联

     多外键关联 注:在两个表之间进行多外键链接 如图: 案例: # 创建两张表并添加外键主键 # 调用Column创建字段 加类型 from sqlalchemy import Integer, For ...

  3. [Python]Django模型(Model)

    前言 系列文章目录 [Python]目录 视频及资料和课件 链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234 提取码:1234 文 ...

  4. MySQL外键关联(一对多)MySQL连接查询

    MySQL外键关联(一对多) 外键说明 什么是外键? 1)表A中有字段(如身份证号)做了主键,表B中也有这个字段(身份证号),这里的身份证号一定来自表A同样字段里的内容,但再B表中身份证号对应id可以 ...

  5. JPA关系映射系列一:one-to-one外键关联

    2019独角兽企业重金招聘Python工程师标准>>> SpringDataJPA是Spring Data的一个子项目,通过提供基于JPA的Repository极大的减少了JPA作为 ...

  6. python Django 模型操作

    python Django 模型操作 1. 添加模型到数据库 2. objects:查找数据 3. all:查找所有数据 4. filter:数据过滤 5. get:获取单个对象 6. order_b ...

  7. PostgreSQL — 外键关联操作

    目录 文章目录 目录 PostgreSQL 的外键关联 创建表时定义外键(References,参照) 修改原有表的外键约束 删除外键约束 参考文档 PostgreSQL 的外键关联 一个外键约束指定 ...

  8. MySQL — 外键关联操作

    目录 文章目录 目录 MySQL 的外键约束 创建表时定义外键(References,参照) 修改原有表的外键约束 删除外键约束 参考文档 MySQL 的外键约束 注意,MySQL 的 InnoDB ...

  9. hibernate---一对一单项外键关联

    常见的数据库设计有两种:主键关联,单项的外键关联. 下面是一对一单项外键关联: 代码: 后台生成的表: 配置powerdesigner连接数据库,可以查看数据表的关联: 一般在powerdesigne ...

最新文章

  1. 14级团队学习成果汇报 -- 利用express+socket.io搭建简易版聊天室
  2. Could not find destination factory for transport
  3. linux 下查看程序依赖的库
  4. 容器入门(5)- 在Registry之间复制镜像
  5. js 判断iframe是否加载完毕
  6. Java 程序设计基础(第四版)下
  7. 免费注册的域名.tk
  8. RK3399平台开发系列讲解(USB设备驱动)5.31、使用usb gadget configfs配置USB功能
  9. DDoS高防云服务器如何防御攻击
  10. 试试看:把电脑时间调到2099年12月31号之后,会发生什么
  11. SIM7600使用TCP连接服务器
  12. 联想thinkpad E450如何进入bios
  13. qW3xT.2,解决挖矿病毒。
  14. python把桢写入txt_使用Tesseract+python进行图片转文字记录
  15. AspectJ 学习笔记
  16. java内存可视化_JVM系列(六)、可视化工具介绍
  17. windows系统C盘“已用空间”不断增大
  18. 如何在500个甚至上千微信群运营推广和赚钱?
  19. centos mysql安装mysql-devel报错
  20. 通过传感器计算打造视觉雷达,下一代自动驾驶系统的关键构成

热门文章

  1. 大网的经验(华为的创新—转载)
  2. 使用Ant制作发布版本
  3. 问题 F: 编写函数:一维数组的逆序 (Append Code)
  4. 问题 L: 一年中的第几天
  5. jq写的项目如何部署到静态服务器_如何把前端项目部署到服务器
  6. pythoncsv数据类型_pandas读取CSV文件时查看修改各列的数据类型格式
  7. body 没有被撑开_父div没有被撑开,该怎么解决?_html/css_WEB-ITnose
  8. matplotlib显示图中标签
  9. 基础层区块链Harmony发布主网新版本v4.0.0
  10. 腾讯推出基于区块链存证的“点亮莫高窟”活动