1. filter
方法
filter
是 Django ORM 中最常用的查询方法之一。它用来根据给定的条件过滤查询集并返回满足条件的对象。
articles = Article.objects.all()
# 使用 SearchFilter 进行搜索
search_param = request.query_params.get('search', None)
author_id = request.query_params.get('author_id', None)
# 模糊搜索
if search_param:articles = articles.filter(title__icontains=search_param)
#精确搜索id
if author_id:rticles = articles.filter(author_id=author_id) # 按作者 ID 精确搜索
如果你有多个条件,也可以使用 filter
进行连接:
articles = Article.objects.filter(title__icontains='Django', content__icontains='Python'
)
这会返回标题包含 "Django" 且内容包含 "Python" 的所有文章。
特点:
filter
会返回满足所有给定条件的结果。它相当于执行 SQL 查询中的WHERE
子句。- 它会隐式使用
AND
逻辑来连接多个条件。
2. Q
对象
Q
对象是 Django 中用于创建复杂查询条件的工具。它允许你在查询中使用 OR
或 AND
逻辑,甚至可以动态地构建查询条件。Q
对象特别适用于需要使用 OR
逻辑或条件组合的场景。
from django.db.models import Qarticles = Article.objects.filter(Q(title__icontains='Django') | Q(description__icontains='Django') | Q(content__icontains='Django')
)
使用场景:
Q
适用于复杂查询,尤其是在需要使用OR
或动态组合查询条件时。- 使用
Q
对象可以灵活地组合不同的查询条件,可以使用&
表示AND
逻辑,使用|
表示OR
逻辑。
filter
用于常见的、简单的过滤条件,适用于大部分常规查询,默认使用AND
逻辑。Q
对象用于构建更复杂的查询,特别是当你需要灵活的OR
逻辑或者动态生成查询时。
articles = Article.objects.all()# 使用 SearchFilter 进行搜索search_param = request.query_params.get('search', None)author_id = request.query_params.get('author_id', None)# # 模糊搜索# if search_param:# articles = articles.filter(title__icontains=search_param)# #精确搜索id# if author_id:# articles = articles.filter(author_id=author_id) # 按作者 ID 精确搜索# 使用 Q 对象进行复杂查询query = Q()if search_param:query &= (Q(title__icontains=search_param) | Q(content__icontains=search_param))if author_id:query &= Q(author_id=author_id)# 应用查询条件articles = articles.filter(query)