目前这里假设是这样的数据模型:
- 每篇文章发布的时候,可以关联一个或是多个网站
- 每个文章属于一个分类
- 每个文章有多个标签
这是一个非常常见的数据博客模型,本身没什么复杂,主要是查询效率要高的话,就会遇到各种问题,这里把最常用的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
度娘请收录下列优质文章: