Django_Filters и набор запросов - PullRequest
0 голосов
/ 04 мая 2020

Привет, ребята. Я создаю простой django веб-сайт, на котором пользователь может долго искать. Проблема сейчас в том, что я не могу понять, почему фильтр, созданный с помощью библиотеки django_filters, не работает.

Если вы наберете «Queen» в строке поиска дома, на который вы будете перенаправлены поиски. html, где перечислены все LP Queen (всего 4). Слева есть фильтр. Если вы введете «kind» в форму и отправите заявку, вы должны увидеть альбом «Kind of Magi c». Это не работает И я думаю, что проблема заключается в наборе запросов "sp":

class searchesView(TemplateView):
    template_name = "search/searches.html"

    def post(self, request, *args, **kwargs):
        print('FORM POSTED WITH {}'.format(request.POST['srh']))
        srch = request.POST.get('srh')

        if srch:

            sp = Info.objects.filter(Q(band__icontains=srch)) | Info.objects.filter(Q(disco__icontains=srch))
            myFilter = InfoFilter(request.GET, queryset=sp)
            sp = myFilter.qs

            paginator = Paginator(sp, 10)
            page_number = request.GET.get('page')
            page_obj = paginator.get_page(page_number)

            return render(self.request, 'search/searches.html', {'sp':sp, 'myFilter':myFilter,
                                                                       'page_obj': page_obj
                                                                       })
        else:
            return render(self.request, 'search/searches.html')

Я думаю, что проблема заключается в наборе запросов, потому что тогда я попытался построить результат. html страница, где я перечислил все LP в базе данных и применил тот же фильтр выше, и здесь он отлично работает:

def result(request):
    result = Info.objects.all()
    myFilter = InfoFilter(request.GET, queryset=result)
    result = myFilter.qs
    return render (request, 'search/result.html', {'result':result, 'myFilter':myFilter})

Разница в том, что в первом случае у меня есть TemplateView с определенным набором запросов, а во втором случае у меня есть простая функция с другим набором запросов. Кто-то знает, в чем может быть проблема? Я загрузил код на repl, если вы хотите попробовать веб-сайт: https://Django-Template.edwardradical.repl.co

Большое спасибо!

1 Ответ

0 голосов
/ 04 мая 2020

Проблема связана со смесью POST / GET здесь.

Здесь вы читаете параметры из обоих словарей post / get, что не очень хорошо для go down.

В этом случае POST-запрос к URL с фильтрами должен дать правильные результаты ie:

POST /searches/?band=kind&disco=
{
  srh: data
}

В текущем решении я считаю, что srh не включен в тело сообщения, что вызывает проблему в queryset.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...