博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python】django模型models的外键关联使用
阅读量:4699 次
发布时间:2019-06-09

本文共 1889 字,大约阅读时间需要 6 分钟。

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 datemodel_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=0model_b.objects.filter(status = 0, name__type__contains = 2)

 

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

单个对象可以使用:

object.属性= value

object.save()

posted on
2015-12-14 10:50 阅读(
...) 评论(
...)

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

你可能感兴趣的文章
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
修改node节点名称
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
SSH加固
查看>>
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
pip 警告!The default format will switch to columns in the future
查看>>
Arrays类学习笔记
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>
maven3在eclipse3.4.2中创建java web项目
查看>>
发布时间 sql语句
查看>>
黑马程序员 ExecuteReader执行查询
查看>>
记一些从数学和程序设计中体会到的思想
查看>>