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)