Django--ORM筛选条件

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")

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容