• 多表查询 及聚合查询


    {{ 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 Q
    from 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)
     





  • 相关阅读:
    静态类、抽象类的笔记
    第一篇
    流复制操作
    速记服务器状态码
    访问修饰符
    jquery对象、js全局变量等tips
    Caching and Indexing
    Using X++ copy the favorites from one user to another
    SID
    Using X++ get Language List from Dynamics AX 2009
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5749458.html
Copyright © 2020-2023  润新知