django - 如何在 django 中动态过滤多个值的模型结果
问题描述
我有以下课程模型与教授、代码、semester_season、semester_year 等
我有请求帖子值:
coursecode = request.POST['coursecode']
courselist = request.POST['courselist']
semesteryear = request.POST['semesteryear']
semesterseason = request.POST['semesterseason']
这是我的过滤器,用于查找上述帖子值的查询集:
course_listobj = Course.objects.filter(
code=coursecode,
title=courselist,
semester_year=semesteryear,
semester_season=semesterseasonid).order_by(
'code', 'title', 'semester_year', 'semester_season')
如何查找一个帖子值是否为空动态查找查询集中的其他值我的意思是
如果没有后值意味着coursecode = None
在这里我发现如下:
if (coursecode != 'None') and (courselist == 'None' and semesteryear == 'None' and semesterseason == 'None'):
course_listobj = Course.objects.filter(code=coursecode).order_by('code')
像上面的多个 if 条件是必需的。请向我建议任何人我怎样才能在多个条件下进行一次查询。
编辑(if条件组合的工作代码):
coursecode = request.POST['coursecode']
courselist = request.POST['courselist']
semesteryear = request.POST['semesteryear']
semesterseason = request.POST['semesterseason']
courses = Course.objects.all().order_by(
'code', 'title', 'semester_year', 'semester_season')
coursecodequery = Q(code=coursecode) if coursecode != 'None' else Q()
courselistquery = Q(title=courselist) if courselist != 'None' else Q()
semesteryearquery = Q(semester_year=semesteryear) if semesteryear != 'None' else Q()
semesterseasonquery = Q(semester_season=semesterseason) if semesterseason != 'None' else Q()
course_listobj = courses.filter(
coursecodequery & courselistquery & semesteryearquery & semesterseasonquery
)
if coursecode == 'None' and courselist == 'None' and semesteryear == 'None' and semesterseason == 'None':
messages.info(request, 'Please select all fields')
if not course_listobj:
messages.info(request, 'No matching courses')
解决方案
您可以链接多个filter
条件。例如:
courses = Course.objects.all().order_by(
'code', 'title', 'semester_year', 'semester_season')
if coursecode != 'None':
courses = courses.filter(code=coursecode)
if courselist != 'None':
courses = courses.filter(title=courselist)
if semesteryear != 'None':
courses = courses.filter(semester_year=semesteryear)
if semesterseason != 'None':
courses = courses.filter(semester_season=semesterseason)
请注意,您的order_by
子句可以固定,因为这些列将始终在结果中返回,无论它们是否在中filter
。
推荐阅读
- python - Python:获取正则表达式成功匹配组的数量
- openssl - 客户端上的套接字错误
, 断开 - javascript - 可以在 TS 中将 undefined 强制转换为 void 吗?
- c++ - 在下面的代码中使用 (int) 的目的是什么?
- javascript - 了解何时以及在 node.js 中实现哪种设计模式的最佳方法是什么
- python - 修改类的 Python 方法装饰器
- python - 在 tkinter 画布上动态调整矩形大小
- kotlin - 在当前上下文中如何访问 Kotlin 协程元素?
- python - python中'lambda'表达式的问题
- windows - 如果机器规格发生变化,我们能否预测 Windows 应用程序将如何工作?