У меня есть следующая модель курса с профессором, кодом, 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):
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')