QuerySet returns empty in django
I am trying to get the book list with 3 conditions:
- Accession number (character varying,10)
- Physical location (character varying,20)
- Book status
Based on the user input:
- Accession number should be present in the list provided by the user
- Physical location should be exact match
- Book status should be 'Published'
qobjects = Q()
variable_column = "accession_number"
search_type = 'in'
filter_string = variable_column + '__' + search_type
#Passed accessionNumber as '123','234',456'
#Also tried 123,456,567
#Both did not work
search_string = '['+accessionNumber+']'
qcolumn = Q(**{filter_string: search_string})
qobjects.add(qcolumn, Q.AND)
print('print qobjects after adding accession numbers')
print(qobjects)
location_column="physical_location"
search_type='iexact'
filter_string = location_column + '__' + search_type
qcolumn_location = Q(**{filter_string: location})
print('print qobjects after adding location')
print(qobjects)
qobjects.add(qcolumn_location,Q.AND)
qcolumn_status = Q(**{'booK_status': 'PUBLISHED'})
qobjects.add(qcolumn_status, Q.AND)
print('print qobjects after adding status')
print(qobjects)
res_set = Book.objects.filter(qobjects).order_by(location_column). \
values('id', 'title', 'cover_image_name','booK_status',
'accession_number', 'total_image_count',)
print('print result set')
print(res_set)
Filter with:
search_type = "in"
res_set = Book.objects.filter(
Q(
*[
Q((f"{f}__{search_type}", v.split(",")))
for f, v in (
("accession_number", accessionNumber),
("physical_location", location),
)
]
),
booK_status="PUBLISHED",
).order_by(location_column)