как отсортировать набор запросов с помощью django и htmx?

#python #django #django-3.2 #htmx

Вопрос:

я использую django-фильтр для применения фильтров, и в новом наборе запросов я хочу выполнить сортировку запросов htmx, которая зависит от выбора тега, измените новую сортировку набора запросов, вот мое мнение:

views.py

 def sorted_htmx_products(request):
    context = {}
    qs= request.GET['order_by']
    print('request', qs['order_by'])
    if qs == "name_a":
        querySet = Product.objects.all().order_by('name')
    elif qs == "name_z":
        querySet = Product.objects.all().order_by('-name')
    elif qs == "price":
        querySet = Product.objects.all().order_by('price')
    elif qs == "brand":
        querySet = Product.objects.all().order_by('brand')
    else:
        querySet = Product.objects.all()

    products = ProductFilter(request.GET, queryset=querySet )
    print('sorted products', products.qs)
    context['products'] = products.qs
    return render(request, 'snippets/htmx_products.html', context)
 

а вот мой фрагмент html, в котором я сделал запрос htmx

             <div class="product-select-box">
                <div class="product-short" >
                    <form hx-get="{% url 'core:sorted-products' %}" hx-target="#removed-products" hx-swap="outerHTML" hx-trigger="change">
                        <p>Trier par:</p>
                        <select name="order_by" class="nice-select" >
                            <option value="default">Default</option>
                            <option value="name_a">Nom (A - Z)</option>
                            <option value="name_z">Nom (Z - A)</option>
                            <option value="price">Prix</option>
                            <option value="brand">Marque</option>
                        </select>
                    </form>
                </div>
            </div>
        
 

почему это вообще не работает ?
как сделать простой вызов формы htmx при изменении опции выбора ?

Комментарии:

1. Можете ли вы показать, как yiu отображает элементы в шаблоне?

2. Ваш price вариант также начинается с двух << s.

3. Вы хотите, чтобы запрос был сделан автоматически при изменении тега select? Напишите немного JavaScript, чтобы сделать это за вас (хотя зачем это делать? Просто позвольте пользователю выбрать свой выбор, принять решение и нажать кнопку, чтобы фактически отфильтровать). Вот совет: поскольку вы уже используете его, в django-фильтре есть фильтр упорядочения .

4. @WillemVanOnsem уверен , что я отредактировал вопрос и поместил весь шаблон продуктов, спасибо за помощь

5. @AbdulAzizBarkat я отправил форму с некоторыми js с onchange=»this.form.submit ()», но он перезагружает страницу, которая не вызывает функцию sorted_htmx_products, спасибо за заказфильтра, я собираюсь попробовать

Ответ №1:

Ты пользуешься hx-trigger="change"> .

AFAIK его нужно изменить на «d» в конце.

Кстати: Пожалуйста, в следующий раз постарайтесь привести минимальный пример.

Комментарии:

1. конечно, следуйте правке после добавления буквы d, она запускает запрос, но получает пустую страницу.

2. @miyou995 вы отладили это с помощью chromium devtools?