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)