博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多表查询 及聚合查询
阅读量:5794 次
发布时间:2019-06-18

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

{
{ article.comment_set.all.count }}这么写的原因 是comment做为子表,是ForeignKey关联,内置有count方法,可以直接调用
{% for tag in article.tag.all %} tag是主表,是一个多对多的关系
django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。 这个属性的名称默认是以子表的名称小写加上_set()来表示,默认返回的是一个querydict对象,你可以继续的根据情况来查询等操作
十:多表查询常用方式及方法
 
Commnet 为 Article的子表
comment = Comment.objects.filter(user__username='li')用这种双下划线的方式进行判断
二:comment.user.username取出外键当中的内容
主表查询子表:
artilce= Article.objects.get(pk=1)
comment = article.comment_set.content
取出的是id=1的文章的所有评论
 
主表可以查询出所关联的所有子表,子表可以查询出所关联主表的信息,也可以通过查询子表当中的外键到主表中去匹配,从而查询出所有的主表
 
 
 
十一:聚集查询相关方式及方法
 
这个silver好sb啊,Django 的查询就是聚合查询,查询一般是一个QuerySet的集合

Q查询

django.db.models.Q

1、Q对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询,例如:

from django.db.models import Qfrom login.models import New #models对象news=New.objects.filter(Q(question__startswith='What'))

 

2、可以组合使用&,|操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。

Q(question__startswith='Who') | Q(question__startswith='What')

 

3、Q对象可以用~操作符放在前面表示否定,也可允许否定与不否定形式的组合

Q(question__startswith='Who') | ~Q(pub_date__year=2005)
 

django *args, **kwargs 用法

 
def foo(*args,**kwargs):
 
printargs =‘, args
 
printkwargs =‘, kwargs
 
print‘—————————————‘
 
if __name__ ==__main__’:
 
foo(1,2,3,4)
 
foo(a=1,b=2,c=3)
 
foo(1,2,3,4, a=1,b=2,c=3)
 
foo(‘a’,1,None, a=1, b=’2′, c=3)
 
 
 
输出结果如下:args =(1,2,3,4)
kwargs ={}
—————————————
args =()
kwargs ={‘a’:1,c’:3,b’:2}
—————————————
args =(1,2,3,4)
kwargs ={‘a’:1,c’:3,b’:2}
—————————————
args =(‘a’,1,None)
kwargs ={‘a’:1,c’:3,b’:2’}
 
 
 
可以看到,这两个是python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个 dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b=’2′, c=3, a’,1,None,)这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。
 
 
 
还有一个很漂亮的用法,就是创建字典:
 
def kw_dict(**kwargs):
 
return kwargs
 
print kw_dict(a=1,b=2,c=3)=={‘a’:1,b’:2,c’:3}
 
还可以这样查询
kwargs['username']='li'
kwargs['username']='wei'
comment =Comment.objects.filter(**kwargs)
 

转载于:https://www.cnblogs.com/wuqingzangyue/p/5749458.html

你可能感兴趣的文章
js设置定时器
查看>>
数据库除运算
查看>>
LeetCode--112--路径总和
查看>>
DeviceIOControl与驱动层 - 缓冲区模式
查看>>
感悟贴2016-05-13
查看>>
vim使用教程
查看>>
跨vlan通信-----单臂路由技术
查看>>
百度编辑器ueditor 光标位置的坐标
查看>>
DEV-C++ 调试方法简明图文教程(转)
查看>>
VS2017+EF+Mysql生成实体数据模型(解决闪退的坑)
查看>>
C++多态、继承的简单分析
查看>>
库克称未来苹果用户可自己决定是否降频 网友:你是在搞笑吗?
查看>>
6倍性能差100TB容量,阿里云POLARDB咋实现?
查看>>
Sublime Text 2 技巧
查看>>
参加婚礼
查看>>
刚毕业从事java开发需要掌握的技术
查看>>
CSS Custom Properties 自定义属性
查看>>
vim
查看>>
MVVM计算器(下)
查看>>
C++中指针和引用的区别
查看>>