Django站群开发最常用到的3条ORM


目前这里假设是这样的数据模型:

  1. 每篇文章发布的时候,可以关联一个或是多个网站
  2. 每个文章属于一个分类
  3. 每个文章有多个标签

这是一个非常常见的数据博客模型,本身没什么复杂,主要是查询效率要高的话,就会遇到各种问题,这里把最常用的3个ORM整理一下

输入一个域名,返回当前域名下的所有文章

Article.objects.filter(sites__domain='127.0.0.1:8002')

这个是最简的...直接用Article查询关联字段sites下的domain即可....

通过域名和分类,获取文章列表

一般站群是肯定需要做域名过滤的,那么自然也要做分类过滤....只是分类没有绑定域名...需要用文章的模型去关联过滤....那么我用了一种比较笨的方式...如果有高手,还望多指点一番..

先获取到一个分类的对象 ( 一般是通过分类的名称 或是slug )

Category.objects.get(name='8002的分类').article_set.filter(sites__domain='127.0.0.1:8002').distinct() #所有的分类
Tag.objects.get(name='8002的分类').article_set.filter(sites__domain='127.0.0.1:8002').distinct() #所有的标签

这种场景常用语标签页,分类页...等...

最难-已知文章列表,获取这些文章的所有的标签

这个为什么难?如果用for那就没什么好说的...如何不用for的情况来解决? 答案就是用django的annotate

from django.db.models import Count
#已知文章列表
a  = Article.objects.filter(sites__domain='127.0.0.1:8002')

set(a.annotate(Count('tags')).values_list('tags__name',flat=True))


本文关键词: | Django站群 | DjangoORM
转载请注明链接 : http://www.zhangte.org/python/52.html
度娘请收录下列优质文章:
  • 反思,以及重新规划时间的安排