https://www.cnblogs.com/williama/p/16282254.html
双下划线筛选条件过滤
- __gt 大于
- __lt 小于
- __gte 大于等于
- __lte 小于等于
- __range 范围查询(顾头顾尾)
- __in 是否含有
- __contains 判断是否包含某个字符,区分大小写
- __icontains 判断是否包含某个字符,忽略大小写
- __year 按照年份筛选数据
- __month 按照月份筛选数据
- __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年的数据
res = models.User.objects.filter(op_time__year=2022)
# 查询月份是5月的数据
res = models.User.objects.filter(op_time__month=5)
查询不包含,id=1的数据
User.objects.exclude (id=1)
django.db.models import Q
User.objects.filter (~ Q (id=1))
解决多条件筛选查询,通过传递filter条件的**kwargs参数
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变量,这样可以根据筛选条件动态扩展
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")