I wrote a class that check 4 parameters in input and shows a list a result in output. Only one of this parameter is required, therefore i have 7 if - else nested blocks. I want to specify that the condition as stated works properly.
I was wandering if there was a smarter way to write this:
if cd['subject'] is None:
if cd['school'] == '':
if cd['price']:
files = File.objects.filter(name__contains=cd['name'], price = '0.0')
else:
files = File.objects.filter(name__contains=cd['name'])
else:
if cd['price']:
files = File.objects.filter(name__contains=cd['name'], school = cd['school'], price = '0.0')
else:
files = File.objects.filter(name__contains=cd['name'], school = cd['school'])
else:
if cd['school'] == '':
if cd['price']:
files = File.objects.filter(name__contains=cd['name'], subject = cd['subject'], price = '0.0')
else:
files = File.objects.filter(name__contains=cd['name'], subject = cd['subject'])
else:
if cd['price']:
files = File.objects.filter(name__contains=cd['name'], school = cd['school'], subject = cd['subject'], price = '0.0')
else:
files = File.objects.filter(name__contains=cd['name'], school = cd['school'], subject = cd['subject'])
return render(request, 'search.html', {'files': files, 'request': request})
None, empty string''and boolean coersion (if <variable>) in comparaisons?cd['price']handling