Loading

django查询【Q查询】【F查询】【filter关键字查询】

1.关键字查询
# 关键字查询
"""
id__gt:大于给定的值。例如:MyModel.objects.filter(id__gt=5) 将返回 id 大于 5 的记录。
id__gte:大于或等于给定的值。
id__lt:小于给定的值。
id__lte:小于或等于给定的值。

id__contains:包含
id__startswith:以给定的字符串开头。例如:MyModel.objects.filter(id__startswith='abc')。
id__endswith:以给定的字符串结尾。例如:MyModel.objects.filter(id__endswith='xyz')。
"""

# 关键字查询(示例)
@action(detail=False, methods=['get'], url_path='search')
    def search(self, request):
        keyword = request.query_params.get('keyword', "").strip()
        print(keyword.isdigit())
        if keyword == "":
            # keyword为空
            queryset = models.Employee.objects.all().order_by('-id')
            ser = EmployModelSerializer(queryset, many=True)
            return Response(ser.data)

        elif keyword.isdigit():
            # 搜索id
            queryset = models.Employee.objects.filter(id__startswith=int(keyword)).all()
            ser = EmployModelSerializer(queryset,many=True)
            return Response(ser.data)

        else:
            # 搜索姓名
            queryset = models.Employee.objects.filter(name__contains=keyword).all()
            ser = EmployModelSerializer(queryset, many=True)
            return Response(ser.data)

        return ExtraException("查询失败")
2.Q查询(& | ~ 对应 与 或 非)

其他作者:https://blog.csdn.net/T_I_A_N_/article/details/89856291

# q查询(示例)
def yang_list(request):
    keyword = request.GET.get("keyword", "").strip()
    con = Q()
    if keyword:
        con.connector = "OR"
        con.children.append(("oid__contains", keyword))
        con.children.append(("url__contains", keyword))

    queryset = models.Order.objects.filter(active=1, customer_id=request.nb_user.id).filter(con).order_by("-id")
    pager = Pagination(request, queryset)
    context = {"pager": pager, "keyword": keyword}
    return render(request, 'user/yang_list.html', context)
posted @ 2024-10-15 12:50  一只大学生  阅读(1)  评论(0编辑  收藏  举报