Django Для использования двух классов FilterView в одном шаблоне

Я создаю форму поиска с использованием FilterView в главном окне. Дважды щелкните на форме ввода в форме поиска в главном окне, чтобы отобразить модальную форму. Я хочу отобразить в модале другой класс FilterView. Класс этих двух FilterView отличается в модели, фильтре и форме, на которую они ссылаются. Как этого можно добиться?

Views.py

class Filter1(FilterView):
    model = Model1
    filterset_class = Filter1
    template_name = 'filter.html'    

class Filter2(FilterView):
    model = Model2
    filterset_class = Filter2
    template_name = 'filter.html' 

HTML(шаблоны)

<form action="" method="get">

        <div class="row">
           {{filter.form|crispy}}    <-I want to use class filter 1
        </div>

<div id="myModal" class="modal fade" tabindex="-1" role="dialog">
・・・
{{filter.form|crispy}}    <- I want to use class filter 2
</div>

Вы не можете использовать его таким образом. Один запрос будет вызывать только один API/url бэкенда за раз и возвращать один ответ. Что вы можете сделать, так это отправить фильтры как контекст в одном ответе. Например:

filter1 = Filter1()
filter2 = Filter2()    
context = {
    'filter1': filter1,
    'filter2': filter2,
    'result': result,
}
return render(request, '<your template name>', context)

Это должно решить вашу проблему. Или вы можете использовать JavaScript для выполнения вызова API при нажатии на модальную кнопку и использовать отдельный URL-маршрут для получения JSON-ответа для вашего фильтра в модале. Использование JavaScript и выполнение AJAX-запроса является рекомендуемым подходом, поскольку это уменьшит количество данных, возвращаемых за один вызов, и не будет содержать ненужных текстов в ответе, если они не нужны.

Спасибо за ваш ответ. Но это не сработалоМожете ли вы рассказать мне немного больше об этом?

Я пробовал. Но он не отображается. Возможно ли передать класс в контекст как словарь?

class test(TemplateView):
    
    def get(self, request):
        filter1 = Filter1()
        filter2 = Filter2()    
        context = {
           'filter': filter1,
           'filter2': filter2,
        }
        print(context)
        return render(request, '/filter.html', context)
Вернуться на верх