3

I have following course model with professor, code, semester_season, semester_year, etc

I have request post values:

coursecode = request.POST['coursecode']
courselist = request.POST['courselist']
semesteryear = request.POST['semesteryear']
semesterseason = request.POST['semesterseason']

this is my filter a queryset for finding above post values:

course_listobj = Course.objects.filter(
  code=coursecode,
  title=courselist,
  semester_year=semesteryear,
  semester_season=semesterseasonid).order_by(
    'code', 'title', 'semester_year', 'semester_season')

This is my front end: enter image description here

how can find if one post value is empty find other values in query set dynamically i mean

if no post value means coursecode = None

here i am finding like below:

if (coursecode != 'None') and (courselist == 'None' and semesteryear == 'None' and semesterseason == 'None'):
    course_listobj = Course.objects.filter(code=coursecode).order_by('code')

like above multiple if conditions are required. pls suggest me any one how can i do one query with multiple conditions.

Edit (Working code for combination of if conditions):

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

1 Answer 1

1

You can chain multiple filter conditions. For example:

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)

Note that your order_by clause can be fixed as those columns will always be returned in the result, regardless of they are in the filter or not.

Sign up to request clarification or add additional context in comments.

9 Comments

Thanks for quick reply but i tried same thing issue is if two request value is not empty other two values are empty means again i have to write if (coursecode !='None' and courselist !='None) and (semesteryear == 'None' and semesterseason == 'None'):
likewise 4c3 = 24 if conditons will come
is there any way to construct query under for loop to eliminate empty request value ( i mean concatenate filter query) like Course.objects.filter(code=coursecode).filter(title=courselist).filter(semester_year=semesteryear)
I don't understand your first comment. You don't have to write such a condition as all if are independent above. Empty ones (i.e. "None") will be skipped. Just try it. You can also make this into a for loop but for 4 conditions this is much more readable.
@ Selcuk Combination of values are not working if i choose two drop down values query result giving one result only, it means if i choose drop down code and courselist only code related fields giving. How can i find code and courselist combination records in the database
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.