django方法总结

1、 配置文件:

复制代码
media: 
    avatar = models.FileField(upload_to='avatar')

sessiongs MEDIA_ROOT=os.path.join(BASE_DIR,"blog","media","uploads")

    文件上传:BASE_DIR</span>/<span style="color: #800000;">"</span><span style="color: #800000;">blog</span><span style="color: #800000;">"</span>/<span style="color: #800000;">"</span><span style="color: #800000;">media</span><span style="color: #800000;">"</span>/<span style="color: #800000;">"</span><span style="color: #800000;">uploads</span><span style="color: #800000;">"</span>/avatar/<span style="color: #000000;">a.png

urls
# media 配置
MEDIA_URL="/media/"
url(r
'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),

         </span>&lt;img src=<span style="color: #800000;">"</span><span style="color: #800000;">/media/avatar/a.png</span><span style="color: #800000;">"</span>&gt;       </pre>
复制代码

2、url配置:

url(r'^articles/([0-9]{4})/$', views.year_archive),    #  year_archive(request,1990)  无名分组
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),    #  year_archive(request,year=1990)  有名分组

3、反向解析:

复制代码
in urls:
           url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),    
           url(r'^index/$', views.index, name='Index'),    
方式一    
in template(模板反向解析):         
        </span>&lt;a href=<span style="color: #800000;">"</span><span style="color: #800000;">articles/2012/</span><span style="color: #800000;">"</span>&gt;2012 Archive&lt;/a&gt;
        &lt;a href=<span style="color: #800000;">"</span><span style="color: #800000;">{% url 'news-year-archive' 2012 %}</span><span style="color: #800000;">"</span>&gt;2012 Archive&lt;/a&gt;

方式二
in views(视图函数反向解析):
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect

        </span><span style="color: #008000;">#</span><span style="color: #008000;">return redirect("/index/") # hard code</span>
        <span style="color: #0000ff;">return</span> HttpResponseRedirect(reverse(<span style="color: #800000;">'</span><span style="color: #800000;">Index</span><span style="color: #800000;">'</span><span style="color: #000000;">))
        </span></pre>
复制代码

4、视图函数:

复制代码
请求对象---request:
                 1、HttpRequest.body:   请求元数据
             </span>2<span style="color: #000000;">、HttpRequest.path:一个字符串,表示请求的路径组件(不含域名)
             </span>3<span style="color: #000000;">、HttpRequest.method
             
             </span>5<span style="color: #000000;">、HttpRequest.GET 
             </span>6<span style="color: #000000;">、HttpRequest.POST
             
             </span>7<span style="color: #000000;">、HttpRequest.FILES
             
             </span>8、HttpRequest.user   :   一个 AUTH_USER_MODEL 类型的对象</pre>
复制代码
响应对象:
              </span><span style="color: #0000ff;">return</span>  HttpResponse(<span style="color: #800000;">""</span>)   <span style="color: #008000;">#</span><span style="color: #008000;">  返回字符串实例                  </span>
              <span style="color: #0000ff;">return</span>  render(request,<span style="color: #800000;">"</span><span style="color: #800000;">template</span><span style="color: #800000;">"</span>,{<span style="color: #800000;">""</span>:<span style="color: #800000;">""</span>})   <span style="color: #008000;">#</span><span style="color: #008000;">  返回字符串实例  (**********)</span>
              <span style="color: #0000ff;">return</span>  redirect(<span style="color: #800000;">"</span><span style="color: #800000;">/index/</span><span style="color: #800000;">"</span>)   <span style="color: #008000;">#</span><span style="color: #008000;">  重定向                    (**********)</span></pre>

5、模板语言:

 views:

def foo():
    name="yuan" 
    l=[111,222,333]
    d={"info":[obj1,obj2]}
    return render(request,"index.html",locals())

 1、变量:{{name}}

---深度查询 句点符   {{l.0}}    {{d.info.0.name}}

----过滤器:{{name|date:"Y-m-d"}}

2、标签

复制代码
 {%for i in l%}
    {{ i }}

{%empty%}
<p>没有符合条件的书籍</p>
{
%endfor%}

--------

{%if name == "yuan"%}
<p>真帅</p>

{%elif ...%}
{
%endif%}

复制代码

3、继承模板:

复制代码
(1) base.html   :   {%block con%}{%end block con%}
(2) index.html: 
          {% extends "base.html"%}         继承    
           {%block con%}
              {{block.super}}              模板盒子中内容
           {%end block con%}                覆盖    
                    
复制代码

 6、models(模型) -----ORM

 映射关系:

复制代码
       sql中表名--------------python的类名
       sql中表的字段----------python的类属性
       sql中表的记录----------python的类对象
    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Article(models.Model):
        nid </span>= models.BigAutoField(primary_key=<span style="color: #000000;">True)
        title </span>= models.CharField(max_length=50, verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">文章标题</span><span style="color: #800000;">'</span><span style="color: #000000;">)
        read_count </span>= models.IntegerField(default=0)</pre>
复制代码

单表操作:

复制代码
添加操作  
 views:
  #方法1:
    article_obj=models.Article.objects.create(nid=1,title="yuan",read_count=12) # create方法返回的是当前创建的文章对象

  #方法2:
article_obj=models.Article(nid=1,title="yuan",read_count=12)
article_obj.save()
删除:
models.Article.objects.filter(title
="python").delete() # 默认级联删除

修改:

models.Article.objects.filter(title
="python").update(read_count=F("read_count")+10)

查询API:
<1> all(): 查询所有结果 #QuerySet

                &lt;2&gt; filter(**kwargs):      它包含了与所给筛选条件相匹配的对象  <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span>
                 
                &lt;3&gt; get(**<span style="color: #000000;">kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,
                                           如果符合筛选条件的对象超过一个或者没有都会抛出错误。</span><span style="color: #008000;">#</span><span style="color: #008000;"> model对象</span>
                 
                &lt;5&gt; exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象  <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet </span>
                 
                &lt;4&gt; values(*<span style="color: #000000;">field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
                                           model的实例化对象,而是一个可迭代的字典序列   </span><span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span>
                 
                &lt;9&gt; values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span>
                 
                &lt;6&gt; order_by(*field):      对查询结果排序 <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span>
                 
                &lt;7&gt; reverse():             对查询结果反向排序 <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span>
                 
                &lt;8&gt; distinct():            从返回结果中剔除重复纪录 <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span>
                 
                &lt;10&gt; count():              返回数据库中匹配查询(QuerySet)的对象数量。 <span style="color: #008000;">#</span><span style="color: #008000;"> int</span>
                 
                &lt;11&gt; first():              返回第一条记录       <span style="color: #008000;">#</span><span style="color: #008000;"> model对象</span>
                 
                &lt;12&gt; last():               返回最后一条记录     <span style="color: #008000;">#</span><span style="color: #008000;"> model对象</span>
                 
                &lt;13&gt;<span style="color: #000000;"> exists():             如果QuerySet包含数据,就返回True,否则返回False
                
                </span></pre>
复制代码

querySet支持链式操作:
models.Article.objects.all().filter().values().distinct().count()
QuerySet数据类型:

复制代码
        
1、可切片,可迭代      [obj,....]  
2、惰性查询:
                 articles_list=models.Article.objects.all()
                 使用articles_list,比如if articles_list,这时转换sql语句                 

3、缓存机制
articles_list
=models.Article.objects.all()
for i in articles_list:
print(i.title) # hit the database

         <span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span><span style="color: #000000;"> articles_list:
               </span><span style="color: #0000ff;">print</span>(i.title)     <span style="color: #008000;">#</span><span style="color: #008000;"> not hit the database    </span>

       ==============================================
        <span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span><span style="color: #000000;"> models.Article.objects.all():
               </span><span style="color: #0000ff;">print</span>(i.title)     <span style="color: #008000;">#</span><span style="color: #008000;"> hit the database</span>
                             
        <span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span><span style="color: #000000;"> models.Article.objects.all():
               </span><span style="color: #0000ff;">print</span>(i.title)     <span style="color: #008000;">#</span><span style="color: #008000;">  hit the database    </span>

4、优化查询
articles_list
=models.Article.objects.all().iterator()
for i in articles_list:
print(i.title) # hit the database

         <span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span><span style="color: #000000;"> articles_list:
               </span><span style="color: #0000ff;">print</span>(i.title)     <span style="color: #008000;">#</span><span style="color: #008000;"> 无结果            </span></pre>
复制代码

连表操作:

表关系:

复制代码
   class UserInfo(AbstractUser):  # settings:   AUTH_USER_MODEL = "blog.UserInfo"
                            """
                            用户信息
                            """
                            nid = models.BigAutoField(primary_key=True)
                            nickname = models.CharField(verbose_name='昵称', max_length=32,null=True)
                            telephone = models.CharField(max_length=11, blank=True, null=True, unique=True, verbose_name='手机号码')
                            avatar = models.FileField(verbose_name='头像', upload_to='avatar', default="avatar/default.png")
                            create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
                    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Blog(models.Model):
                        </span><span style="color: #800000;">"""</span><span style="color: #800000;">
                        站点信息
                        </span><span style="color: #800000;">"""</span><span style="color: #000000;">
                        nid </span>= models.BigAutoField(primary_key=<span style="color: #000000;">True)
                        title </span>= models.CharField(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">个人博客标题</span><span style="color: #800000;">'</span>, max_length=64<span style="color: #000000;">)
                        site </span>= models.CharField(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">个人博客后缀</span><span style="color: #800000;">'</span>, max_length=32, unique=<span style="color: #000000;">True)
                        theme </span>= models.CharField(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">博客主题</span><span style="color: #800000;">'</span>, max_length=32<span style="color: #000000;">)

                        user </span>= models.OneToOneField(to=<span style="color: #800000;">'</span><span style="color: #800000;">UserInfo</span><span style="color: #800000;">'</span>, to_field=<span style="color: #800000;">'</span><span style="color: #800000;">nid</span><span style="color: #800000;">'</span><span style="color: #000000;">)

                        

                    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Category(models.Model):
                        
                        nid </span>= models.AutoField(primary_key=<span style="color: #000000;">True)
                        title </span>= models.CharField(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">分类标题</span><span style="color: #800000;">'</span>, max_length=32<span style="color: #000000;">)
                        blog </span>= models.ForeignKey(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">所属博客</span><span style="color: #800000;">'</span>, to=<span style="color: #800000;">'</span><span style="color: #800000;">Blog</span><span style="color: #800000;">'</span>, to_field=<span style="color: #800000;">'</span><span style="color: #800000;">nid</span><span style="color: #800000;">'</span><span style="color: #000000;">)

                        


                    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Article(models.Model):
                        nid </span>= models.BigAutoField(primary_key=<span style="color: #000000;">True)
                        title </span>= models.CharField(max_length=50, verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">文章标题</span><span style="color: #800000;">'</span><span style="color: #000000;">)
                        desc </span>= models.CharField(max_length=255, verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">文章描述</span><span style="color: #800000;">'</span><span style="color: #000000;">)
                        
                        </span><span style="color: #008000;">#</span><span style="color: #008000;"> category字段: 与Article对象关联的category对象</span>
                        category = models.ForeignKey(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">文章类型</span><span style="color: #800000;">'</span>, to=<span style="color: #800000;">'</span><span style="color: #800000;">Category</span><span style="color: #800000;">'</span>, to_field=<span style="color: #800000;">'</span><span style="color: #800000;">nid</span><span style="color: #800000;">'</span>, null=<span style="color: #000000;">True)
                        
                        </span><span style="color: #008000;">#</span><span style="color: #008000;"> user字段:与Article对象关联的user字段</span>
                        user = models.ForeignKey(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">所属用户</span><span style="color: #800000;">'</span>, to=<span style="color: #800000;">'</span><span style="color: #800000;">UserInfo</span><span style="color: #800000;">'</span>, to_field=<span style="color: #800000;">'</span><span style="color: #800000;">nid</span><span style="color: #800000;">'</span><span style="color: #000000;">)
                        
                        
                        </span><span style="color: #008000;">#</span><span style="color: #008000;"> tags字段: 与Article对象关联的所有的标签对象集合</span>
tags = models.ManyToManyField( to="Tag", through='Article2Tag', through_fields=('article', 'tag'), )
                    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> ArticleDetail(models.Model):
                        
                        nid </span>= models.AutoField(primary_key=<span style="color: #000000;">True)
                        content </span>= models.TextField(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">文章内容</span><span style="color: #800000;">'</span><span style="color: #000000;">, )

                        article </span>= models.OneToOneField(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">所属文章</span><span style="color: #800000;">'</span>, to=<span style="color: #800000;">'</span><span style="color: #800000;">Article</span><span style="color: #800000;">'</span>, to_field=<span style="color: #800000;">'</span><span style="color: #800000;">nid</span><span style="color: #800000;">'</span><span style="color: #000000;">)
                    
                    </span><span style="color: #0000ff;">class</span> Article2Tag(models.Model):  <span style="color: #008000;">#</span><span style="color: #008000;">  中介模型</span>
                        nid = models.AutoField(primary_key=<span style="color: #000000;">True)
                        article </span>= models.ForeignKey(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">文章</span><span style="color: #800000;">'</span>, to=<span style="color: #800000;">"</span><span style="color: #800000;">Article</span><span style="color: #800000;">"</span>, to_field=<span style="color: #800000;">'</span><span style="color: #800000;">nid</span><span style="color: #800000;">'</span><span style="color: #000000;">)
                        tag </span>= models.ForeignKey(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">标签</span><span style="color: #800000;">'</span>, to=<span style="color: #800000;">"</span><span style="color: #800000;">Tag</span><span style="color: #800000;">"</span>, to_field=<span style="color: #800000;">'</span><span style="color: #800000;">nid</span><span style="color: #800000;">'</span><span style="color: #000000;">)
                    
                    
                    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Tag(models.Model):
                        nid </span>= models.AutoField(primary_key=<span style="color: #000000;">True)
                        title </span>= models.CharField(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">标签名称</span><span style="color: #800000;">'</span>, max_length=32<span style="color: #000000;">)
                        blog </span>= models.ForeignKey(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">所属博客</span><span style="color: #800000;">'</span>, to=<span style="color: #800000;">'</span><span style="color: #800000;">Blog</span><span style="color: #800000;">'</span>, to_field=<span style="color: #800000;">'</span><span style="color: #800000;">nid</span><span style="color: #800000;">'</span>)</pre>
复制代码

关联表的添加记录操作:

复制代码
 1、创建一篇文章对象:
                           user_obj=models.UserInfo.objects.get(nid=1)
                           category_obj=models.Category.objects.get(nid=2)
                       </span><span style="color: #008000;">#</span><span style="color: #008000;">################一对多关系绑定#########################</span>
                       <span style="color: #008000;">#</span><span style="color: #008000;"> 方式1:</span>
                       article_obj=models.Article.objects.create(nid=5,title=<span style="color: #800000;">"</span><span style="color: #800000;">招呼亚星</span><span style="color: #800000;">"</span>....,user=user_obj,category=<span style="color: #000000;">category_obj)
                       
                       </span><span style="color: #008000;">#</span><span style="color: #008000;"> 方式2:</span>
                        article_obj=models.Article.objects.create(nid=5,title=<span style="color: #800000;">"</span><span style="color: #800000;">招呼亚星</span><span style="color: #800000;">"</span>....,user_id=1,category_id=2<span style="color: #000000;">)
                       </span><span style="color: #800000;">'''</span><span style="color: #800000;">
                           Article:
                                     nid         title        user_id     category_id
                                      5         招呼亚星         1              2
                                       
                       </span><span style="color: #800000;">'''</span>
                       <span style="color: #008000;">#</span><span style="color: #008000;">###########################多对多关系绑定#########################</span>
                       <span style="color: #0000ff;">if</span><span style="color: #000000;"> 没有中介模型:
                               tags </span>= models.ManyToManyField(<span style="color: #800000;">"</span><span style="color: #800000;">Tag</span><span style="color: #800000;">"</span><span style="color: #000000;">)
                               </span><span style="color: #800000;">'''</span><span style="color: #800000;">
                                  ORM创建的第三张表:
                                  Article2tags:

                                     nid    article_id    tag_id   
                                      1         5            1
                                      2         5            2                                          
                               
                               </span><span style="color: #800000;">'''</span><span style="color: #000000;">
                               
                               实例:给article_obj绑定kw1,kw2的标签
                                   tag1</span>=Tag.objects.filter(title=<span style="color: #000000;">kw1).first()
                                   tag2</span>=Tag.objects.filter(title=<span style="color: #000000;">kw2).first()
                                   
                                   article_obj.tags.add(tag1,tag2)   </span><span style="color: #008000;">#</span>      
                                   article_obj.tags.add(*<span style="color: #000000;">[tag1,tag2])    
                                   article_obj.tags.add(</span>1,2<span style="color: #000000;">)    
                                   article_obj.tags.add(</span>*[1,2<span style="color: #000000;">])  
                                        
                                解除关系:
                                    article_obj.tags.remove(tag1,tag2)
                                    article_obj.tags.clear()

                                重置关系:
                                     article_obj.tags.clear()
                                     article_obj.tags.add(tag1,tag2)  
                                     </span>=====<span style="color: #000000;">
                                     article_obj.tags.set(tag1,tag2)
                                     
                                     
                                     
                                     
                    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> 有中介模型:                
                            tags </span>=<span style="color: #000000;"> models.ManyToManyField(
                                        to</span>=<span style="color: #800000;">"</span><span style="color: #800000;">Tag</span><span style="color: #800000;">"</span><span style="color: #000000;">,
                                        through</span>=<span style="color: #800000;">'</span><span style="color: #800000;">Article2Tag</span><span style="color: #800000;">'</span><span style="color: #000000;">,
                                        through_fields</span>=(<span style="color: #800000;">'</span><span style="color: #800000;">article</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">tag</span><span style="color: #800000;">'</span><span style="color: #000000;">),
                                    )

                            </span><span style="color: #0000ff;">class</span> Article2Tag(models.Model):  <span style="color: #008000;">#</span><span style="color: #008000;">  中介模型</span>
                                nid = models.AutoField(primary_key=<span style="color: #000000;">True)
                                article </span>= models.ForeignKey(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">文章</span><span style="color: #800000;">'</span>, to=<span style="color: #800000;">"</span><span style="color: #800000;">Article</span><span style="color: #800000;">"</span>, to_field=<span style="color: #800000;">'</span><span style="color: #800000;">nid</span><span style="color: #800000;">'</span><span style="color: #000000;">)
                                tag </span>= models.ForeignKey(verbose_name=<span style="color: #800000;">'</span><span style="color: #800000;">标签</span><span style="color: #800000;">'</span>, to=<span style="color: #800000;">"</span><span style="color: #800000;">Tag</span><span style="color: #800000;">"</span>, to_field=<span style="color: #800000;">'</span><span style="color: #800000;">nid</span><span style="color: #800000;">'</span><span style="color: #000000;">) 
                       
                         绑定多对多的关系,有中介模型,不能再使用article_obj.tags.add(),remove()等方法;
                         只能用Article2Tag表进行实例对象。
                         
                         
                         
                         实例:给article_obj绑定kw1,kw2的标签:
                         
                             models.Article2Tag.objects.create(tag_id</span>=1,article_id=5<span style="color: #000000;">)
                             models.Article2Tag.objects.create(tag_id</span>=2,article_id=5)</pre>
复制代码

关联表的查询操作

 基于对象查询(子查询):

复制代码
                            一对多的查询:
                            实例1:查询主键为4的文章的分类名称(正向查询,按字段)
                                   
                                   article_obj</span>=models.Article.objects.get(nid=4<span style="color: #000000;">)
                                   </span><span style="color: #0000ff;">print</span><span style="color: #000000;">(article_obj.category.title)
                            
                                   SELECT </span>* FROM <span style="color: #800000;">"</span><span style="color: #800000;">blog_article</span><span style="color: #800000;">"</span> WHERE <span style="color: #800000;">"</span><span style="color: #800000;">blog_article</span><span style="color: #800000;">"</span>.<span style="color: #800000;">"</span><span style="color: #800000;">nid</span><span style="color: #800000;">"</span> = 4;  // category_id=2<span style="color: #000000;">
                                   SELECT </span>* FROM <span style="color: #800000;">"</span><span style="color: #800000;">blog_category</span><span style="color: #800000;">"</span> WHERE <span style="color: #800000;">"</span><span style="color: #800000;">blog_category</span><span style="color: #800000;">"</span>.<span style="color: #800000;">"</span><span style="color: #800000;">nid</span><span style="color: #800000;">"</span> = 2<span style="color: #000000;">; 

                            实例2:查询用户yuan发表过的所有的文章(反向查询,表名_set)
                                   yuan</span>=models.UserInfo.objects.get(username=<span style="color: #800000;">"</span><span style="color: #800000;">yuan</span><span style="color: #800000;">"</span><span style="color: #000000;">)
                                   book_list</span>=yuan.article_set.all()  <span style="color: #008000;">#</span><span style="color: #008000;"> QuerySet </span>
                        多对多的查询:
                            
                             实例3:查询主键为4的文章的标签名称(正向查询,按字段)     
                                 article_obj</span>=models.Article.objects.get(nid=4<span style="color: #000000;">)                                
                                 tag_list</span>=article_obj.tags.all()   <span style="color: #008000;">#</span><span style="color: #008000;">  是通过Article2Tag找到tag表中关联的tag记录</span>
                                 <span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span><span style="color: #000000;"> tag_list:
                                      </span><span style="color: #0000ff;">print</span><span style="color: #000000;">(i.title)
                                  
                             实例4:查询web开发的这个标签对应的所有的文章(反向查询,按表名_set)
                                tag_obj</span>=models.Tag.objects.get(title=<span style="color: #800000;">"</span><span style="color: #800000;">web开发</span><span style="color: #800000;">"</span><span style="color: #000000;">)
                                article_list</span>=<span style="color: #000000;">tag_obj.article_set.all()
                                </span><span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span><span style="color: #000000;"> article_list:
                                    </span><span style="color: #0000ff;">print</span><span style="color: #000000;">(i.title)                            
                                    
                             实例5:查询web开发的这个标签对应的所有的文章对应的作者名字
                                  tag_obj</span>=models.Tag.objects.get(title=<span style="color: #800000;">"</span><span style="color: #800000;">web开发</span><span style="color: #800000;">"</span><span style="color: #000000;">)
                                  article_list</span>=<span style="color: #000000;">tag_obj.article_set.all()    
                                  </span><span style="color: #0000ff;">for</span> article <span style="color: #0000ff;">in</span><span style="color: #000000;"> article_list:
                                       </span><span style="color: #0000ff;">print</span><span style="color: #000000;">(article.user.username)                                                                                               </span></pre>
复制代码

基于QuerySet跨表查询  正向查询,按字段 ;反向查询,按表名(join查询)

复制代码
一对多的查询:
                            实例1:查询主键为4的文章的分类名称
                                   
                                  models.Article.objects.filter(nid</span>=4).values(<span style="color: #800000;">"</span><span style="color: #800000;">category__title</span><span style="color: #800000;">"</span><span style="color: #000000;">)   
                                  models.Category.objects.filter(article__nid</span>=4).values(<span style="color: #800000;">"</span><span style="color: #800000;">title</span><span style="color: #800000;">"</span><span style="color: #000000;">)
                                  
                            实例2:查询用户yuan发表过的所有的文章
                                   models.UserInfo.objects.filter(username</span>=<span style="color: #800000;">"</span><span style="color: #800000;">yuan</span><span style="color: #800000;">"</span><span style="color: #000000;">).values(article__title)
                                   models.Article.objects.filter(user__username</span>=<span style="color: #800000;">"</span><span style="color: #800000;">yuan</span><span style="color: #800000;">"</span>).values(<span style="color: #800000;">"</span><span style="color: #800000;">title</span><span style="color: #800000;">"</span><span style="color: #000000;">)

多对多的查询:

                                 实例3:查询主键为4的文章的标签名称(正向查询,按字段)     
                                     models.Article.objects.filter(nid</span>=4).values(<span style="color: #800000;">"</span><span style="color: #800000;">tags__title</span><span style="color: #800000;">"</span><span style="color: #000000;">)
                                     models.Tag.objects.filter(article__nid</span>=4).values(<span style="color: #800000;">"</span><span style="color: #800000;">title</span><span style="color: #800000;">"</span><span style="color: #000000;">)                                     
                                     
                                 实例4:查询web开发的这个标签对应的所有的文章(反向查询,按表名_set)
                                     models.Article.objects.filter(tags__title</span>=<span style="color: #800000;">"</span><span style="color: #800000;">web开发</span><span style="color: #800000;">"</span>).values(<span style="color: #800000;">"</span><span style="color: #800000;">title</span><span style="color: #800000;">"</span><span style="color: #000000;">)
                                     models.Tag.objects.filter(title</span>=<span style="color: #800000;">"</span><span style="color: #800000;">web开发</span><span style="color: #800000;">"</span>).values(<span style="color: #800000;">"</span><span style="color: #800000;">article__title</span><span style="color: #800000;">"</span><span style="color: #000000;">)                                     
                                       
                                 实例5:查询web开发的这个标签对应的所有的文章对应的作者名字
                                      models.Tag.objects.filter(title</span>=<span style="color: #800000;">"</span><span style="color: #800000;">web开发</span><span style="color: #800000;">"</span>).values(<span style="color: #800000;">"</span><span style="color: #800000;">article__user__username</span><span style="color: #800000;">"</span><span style="color: #000000;">)
                                      models.UserInfo.objects.filter(article__tags__title</span>=<span style="color: #800000;">"</span><span style="color: #800000;">web开发</span><span style="color: #800000;">"</span>).values(<span style="color: #800000;">"</span><span style="color: #800000;">username</span><span style="color: #800000;">"</span>)</pre>
复制代码

聚合查询与分组查询:

复制代码
聚合查询:
 # 查询所有书籍的平均价格
      Book.objects.all().aggregate(Avg('price'))
                            
分组查询:
#查询每一个出版社出版过的名字以及出版书籍个数 sql: select publish.name,Count(book.name) from Book inner join publish on book.pub_id=publish.id group by publish.name
复制代码

 

posted @ 2019-10-04 09:56  呵!小鹿  阅读(211)  评论(0编辑  收藏  举报