Я создаю приложение Django и пытаюсь включить больше полей поиска в интерфейс администратора Django для конкретной модели, чтобы пользователи могли одновременно искать больше полей. Например, пользователи могут вводить в одном поле поиска название города, а в другом поле поиска - название улицы, а все экземпляры модели, имеющие соответствующие города и улицы, отображаются в браузере после нажатия кнопки «Поиск». Веб-интерфейс администратора по умолчанию имеет только одно окно поиска. Я добавил три окна поиска в файл change_list.html
, и когда я ввожу некоторые данные в эти поля поиска в браузере и нажимаю «Поиск», формируется правильный URL-адрес (с строкой запроса, содержащей эти три входных параметра, по которым нужно выполнить поиск). Затем я фиксирую эти входные параметры в методе queryset
, который я переопределил в своем классе, который расширяет циклы models.AdminModel
, выполняет фильтрацию набора запросов и, наконец, возвращает отфильтрованный запрос. Теперь проблема заключается в том, что набор фильтрованных запросов просто не отображается на веб-странице (веб-интерфейс моей модели) после того, как процесс поиска завершен, он говорит, что совпадений не найдено. Но я определенно уверен, что набор фильтрованных запросов содержит данные, которые я печатаю в командной строке перед выполнением команды return
метода queryset
, и он печатает правильные данные.Queryset не отображается в интерфейсе администратора django
Вот мой queryset
метод:
def queryset(self, request):
qs = super(UkopcanjeAdmin, self).queryset(request)
if "mjesto" in request.GET:
lokacija = request.GET.get('mjesto',None)
if lokacija:
qs = qs.filter(mjesto__icontains=lokacija)
if "ulica" in request.GET:
ulica = request.GET.get('ulica',None)
if ulica:
qs = qs.filter(ulica__icontains=ulica)
if "naziv" in request.GET:
naziv = request.GET.get('naziv',None)
if naziv:
qs = qs.filter(naziv__icontains=naziv)
print qs #this prints correct filtered data
return qs
Почему не отфильтрованный набор запросов показан в веб-интерфейсе?
EDIT: Благодаря моему другу, мне наконец-то удалось решить проблему. И решение довольно простое, все, что мне нужно было сделать, - переместить весь код метода queryset
в метод get_search_results
, а по отфильтрованному запросу query return false
boolean parameter (потому что метод get_search_results
возвращает два параметра). Поэтому, если кто-то хочет настроить процесс поиска в Django, следует использовать метод get_search_results
. Там вы можете получить доступ к аргументам строки запроса и получить некоторые данные так, как вы хотите.
Но могу ли я получить доступ к параметрам URL в методе 'get_queryset'? – programmer
@programmer Я обновил свой ответ. Он принимает «запрос» в качестве аргумента, и вы можете получить GET и все остальное, что вам нужно оттуда. – wolendranh
Я изменил 'queryset' на' get_queryset', но, к сожалению, поведение такое же. Фильтрованный набор запросов содержит правильные данные, но он просто не отображается в браузере ... Интересно, что он работает хорошо, только если у меня есть один параметр в строке запроса URL, например localhost: 8000/admin/mainApp/some_model /? location = someCity, но если у меня есть несколько параметров, отфильтрованный набор запросов не отображается ... – programmer