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, B

B.objects.filter(a=?)

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

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

from appname.models import A, B

object_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()

【Python】django模型models的外键关联使用的更多相关文章

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

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

  2. python django中的orm外键级联删除

    今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: ...

  3. django admin编辑被外键关联的主表时支持显示字表记录

    假设有模型 class A(models.Model): name = models.CharField() class B(models.Model): name = models.CharFiel ...

  4. pythonのsqlalchemy外键关联查询

    #!/usr/bin/env python import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.dec ...

  5. Django框架----外键关联

    app/models.py中: 创建班级表 class classes(models.Model): id = models.AutoField(primary_key=True) name = mo ...

  6. Python sqlalchemy orm 外键关联

    创建外键关联 并通过relationship 互相调用 如图: 实现代码: import sqlalchemy # 调用链接数据库 from sqlalchemy import create_engi ...

  7. Python sqlalchemy orm 多外键关联

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

  8. Django(15)外键和表关系

    外键删除操作 如果一个模型使用了外键.那么在对方那个模型被删掉后,该进行什么样的操作.可以通过on_delete来指定.可以指定的类型如下: CASCADE:级联操作.如果外键对应的那条数据被删除了, ...

  9. django 模型models

    1. django 模型models 常用字段          1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列 如果要显式的自定义一 ...

随机推荐

  1. mysql事件

    文章参考自http://blog.163.com/duanpeng3@126/blog/static/8854373520105182123112/在使用这个功能之前必须确保event_schedul ...

  2. PLSQL_基础系列09_时间戳记TIMESTAMP(案例)

    2013-11-09 Created By BaoXinjian

  3. Workflow_如何处理标准异常和自定义异常(案例)

    2014-05-31 Created By BaoXinjian

  4. python urllib模块的urlopen()的使用方法及实例

    Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 一.urllib模块urlopen()函数: urlopen(url, data=N ...

  5. [复变函数]第10堂课 3.2 Cauchy 积分定理

    0. 引言 (1) $\dps{\int_{|z-a|=\rho}\frac{1}{z-a}\rd z=2\pi i\neq 0}$: 有奇点 (在 $|z|>0$: 二连通区域内解析), 周线 ...

  6. SteamVR Unity工具包(VRTK)之激光和移动

    简单激光指针(VRTK_ SimplePointer) 简单指针(Simple Pointer)脚本从控制器尾部发出一个有色光束来模拟激光束.这在场景中指向对象很有用,它能判断所指向的对象以及对象距控 ...

  7. Java多线程之线程中断

    该例子说明,Sleep可以被中断,但是I/O和synchronized不能被中断. package Thread.Interrupting; import java.io.IOException; i ...

  8. Python标准库04 文件管理 (部分os包,shutil包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在操作系统下,用户可以通过操作系统的命令来管理文件,参考linux文件管理相关命令 ...

  9. pgdump使用

    pgdump dbname-h hostIp-U user-p port-t schema_name.table_name-s // nodata-f // to output file /opt/P ...

  10. Oracle安全漏洞2016.10报告

    Oracle安全漏洞2016.10报告 http://www.cnvd.org.cn/webinfo/show/3950