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><img src=<span style="color: #800000;">"</span><span style="color: #800000;">/media/avatar/a.png</span><span style="color: #800000;">"</span>> </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><a href=<span style="color: #800000;">"</span><span style="color: #800000;">articles/2012/</span><span style="color: #800000;">"</span>>2012 Archive</a> <a href=<span style="color: #800000;">"</span><span style="color: #800000;">{% url 'news-year-archive' 2012 %}</span><span style="color: #800000;">"</span>>2012 Archive</a>
方式二
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<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span> <3> get(**<span style="color: #000000;">kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个, 如果符合筛选条件的对象超过一个或者没有都会抛出错误。</span><span style="color: #008000;">#</span><span style="color: #008000;"> model对象</span> <5> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet </span> <4> values(*<span style="color: #000000;">field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列 </span><span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span> <9> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span> <6> order_by(*field): 对查询结果排序 <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span> <7> reverse(): 对查询结果反向排序 <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span> <8> distinct(): 从返回结果中剔除重复纪录 <span style="color: #008000;">#</span><span style="color: #008000;">QuerySet</span> <10> count(): 返回数据库中匹配查询(QuerySet)的对象数量。 <span style="color: #008000;">#</span><span style="color: #008000;"> int</span> <11> first(): 返回第一条记录 <span style="color: #008000;">#</span><span style="color: #008000;"> model对象</span> <12> last(): 返回最后一条记录 <span style="color: #008000;">#</span><span style="color: #008000;"> model对象</span> <13><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)tags = models.ManyToManyField( to="Tag", through='Article2Tag', through_fields=('article', 'tag'), )</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>
</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