https://www.cnblogs.com/williama/p/16282254.html
雙下劃線篩選條件過濾
- __gt 大于
- __lt 小于
- __gte 大于等于
- __lte 小于等于
- __range 范圍查詢(顧頭顧尾)
- __in 是否含有
- __contains 判斷是否包含某個字符咬崔,區(qū)分大小寫
- __icontains 判斷是否包含某個字符确垫,忽略大小寫
- __year 按照年份篩選數(shù)據(jù)
- __month 按照月份篩選數(shù)據(jù)
- __startwith 以**開頭
- __endswith 以**結尾
- __regex 正則
# 查詢年齡大于20的用戶
res = models.User.objects.filter(age__gt=20) # 等號僅作為賦值運算
# 查詢年齡在18到26之間的用戶
res = models.User.objects.filter(age__range=[18,26]) # 包含18和26
# 查詢年齡是18、22、25的用戶
res = models.User.objects.filter(age__in=[18,22,25])
# 查詢姓名中包含字母j和J的用戶
res = models.User.objects.filter(name__contains='j')
#查詢姓名中包含字母j的用戶
res = models.User.objects.filter(name__icontains='j')
# 查詢年份是22年的數(shù)據(jù)
res = models.User.objects.filter(op_time__year=2022)
# 查詢月份是5月的數(shù)據(jù)
res = models.User.objects.filter(op_time__month=5)
查詢不包含找岖,id=1的數(shù)據(jù)
User.objects.exclude (id=1)
django.db.models import Q
User.objects.filter (~ Q (id=1))
解決多條件篩選查詢,通過傳遞filter條件的**kwargs參數(shù)
def getStudentList(self, request, *args, **kwargs):
param_grade_name = request.query_params.get('grade_name')
param_student_name = request.query_params.get('name')
# 定義filter的篩選條件的kwargs變量,這樣可以根據(jù)篩選條件動態(tài)擴展
gradefilters = {
"is_deleted": False
}
studentfilters = {}
if param_grade_name:
gradefilters['grade_name'] = param_grade_name
if param_student_name:
studentfilters['name'] = param_student_name
gradeIds = Grade.objects.filter(**gradefilters).values_list('id', flat=True)
students = StudentInfo.objects.filter(grade_id__in=gradeIds, **studentfilters).order_by("-id")