QuerySet возвращает значение empty в django

Я пытаюсь получить список книг с 3 условиями:

  1. Регистрационный номер (с разными символами),10)
  2. Физическое местоположение (с разными символами,20)
  3. Статус книги

На основе пользовательского ввода:

  1. Регистрационный номер должен присутствовать в списке, предоставленном пользователем
  2. Физическое местоположение должно точно соответствовать
  3. Статус книги должен быть "Опубликована"

 

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)

Отфильтруйте с помощью:

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)
Вернуться на верх